{"id":5892,"date":"2022-04-03T13:17:00","date_gmt":"2022-04-03T05:17:00","guid":{"rendered":"https:\/\/egonlin.com\/?p=5892"},"modified":"2022-04-03T13:17:00","modified_gmt":"2022-04-03T05:17:00","slug":"03-02-modelserializer%e7%bb%84%e4%bb%b6","status":"publish","type":"post","link":"https:\/\/egonlin.com\/?p=5892","title":{"rendered":"03-02 ModelSerializer\u7ec4\u4ef6"},"content":{"rendered":"<h1>\u6a21\u578b\u7c7b\u5e8f\u5217\u5316\u5668<\/h1>\n<p>\u5982\u679c\u6211\u4eec\u60f3\u8981\u4f7f\u7528\u5e8f\u5217\u5316\u5668\u5bf9\u5e94\u7684\u662fDjango\u7684\u6a21\u578b\u7c7b\uff0cDRF\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86ModelSerializer\u6a21\u578b\u7c7b\u5e8f\u5217\u5316\u5668\u6765\u5e2e\u52a9\u6211\u4eec\u5feb\u901f\u521b\u5efa\u4e00\u4e2aSerializer\u7c7b\u3002<\/p>\n<p>ModelSerializer\u4e0e\u5e38\u89c4\u7684Serializer\u76f8\u540c\uff0c\u4f46\u63d0\u4f9b\u4e86\uff1a<\/p>\n<ul>\n<li>\u57fa\u4e8e\u6a21\u578b\u7c7b\u81ea\u52a8\u751f\u6210\u4e00\u7cfb\u5217\u5b57\u6bb5<\/li>\n<li>\u57fa\u4e8e\u6a21\u578b\u7c7b\u81ea\u52a8\u4e3aSerializer\u751f\u6210validators\uff0c\u6bd4\u5982unique_together<\/li>\n<li>\u5305\u542b\u9ed8\u8ba4\u7684create()\u548cupdate()\u7684\u5b9e\u73b0<\/li>\n<\/ul>\n<h2>1\u3001\u5b9a\u4e49<\/h2>\n<p>\u6bd4\u5982\u6211\u4eec\u521b\u5efa\u4e00\u4e2aBookInfoSerializer<\/p>\n<pre><code class=\"language-python\">class BookInfoSerializer(serializers.ModelSerializer):\n    &quot;&quot;&quot;\u56fe\u4e66\u6570\u636e\u5e8f\u5217\u5316\u5668&quot;&quot;&quot;\n    class Meta:\n        model = BookInfo\n        fields = &#039;__all__&#039;<\/code><\/pre>\n<ul>\n<li>model \u6307\u660e\u53c2\u7167\u54ea\u4e2a\u6a21\u578b\u7c7b<\/li>\n<li>fields \u6307\u660e\u4e3a\u6a21\u578b\u7c7b\u7684\u54ea\u4e9b\u5b57\u6bb5\u751f\u6210<\/li>\n<\/ul>\n<p>\u6211\u4eec\u53ef\u4ee5\u5728python manage.py shell\u4e2d\u67e5\u770b\u81ea\u52a8\u751f\u6210\u7684BookInfoSerializer\u7684\u5177\u4f53\u5b9e\u73b0<\/p>\n<pre><code class=\"language-python\">>&gt;&gt; from booktest.serializers import BookInfoSerializer\n>&gt;&gt; serializer = BookInfoSerializer()\n>&gt;&gt; serializer\nBookInfoSerializer():\n    id = IntegerField(label=&#039;ID&#039;, read_only=True)\n    btitle = CharField(label=&#039;\u540d\u79f0&#039;, max_length=20)\n    bpub_date = DateField(allow_null=True, label=&#039;\u53d1\u5e03\u65e5\u671f&#039;, required=False)\n    bread = IntegerField(label=&#039;\u9605\u8bfb\u91cf&#039;, max_value=2147483647, min_value=-2147483648, required=False)\n    bcomment = IntegerField(label=&#039;\u8bc4\u8bba\u91cf&#039;, max_value=2147483647, min_value=-2147483648, required=False)\n    image = ImageField(allow_null=True, label=&#039;\u56fe\u7247&#039;, max_length=100, required=False)<\/code><\/pre>\n<h2>2\u3001\u6307\u5b9a\u5b57\u6bb5<\/h2>\n<p>1) \u4f7f\u7528<strong>fields<\/strong>\u6765\u660e\u786e\u5b57\u6bb5\uff0c<code>__all__<\/code>\u8868\u540d\u5305\u542b\u6240\u6709\u5b57\u6bb5\uff0c\u4e5f\u53ef\u4ee5\u5199\u660e\u5177\u4f53\u54ea\u4e9b\u5b57\u6bb5\uff0c\u5982<\/p>\n<pre><code class=\"language-python\">class BookInfoSerializer(serializers.ModelSerializer):\n    &quot;&quot;&quot;\u56fe\u4e66\u6570\u636e\u5e8f\u5217\u5316\u5668&quot;&quot;&quot;\n    class Meta:\n        model = BookInfo\n        fields = (&#039;id&#039;, &#039;btitle&#039;, &#039;bpub_date&#039;)<\/code><\/pre>\n<p>2) \u4f7f\u7528<strong>exclude<\/strong>\u53ef\u4ee5\u660e\u786e\u6392\u9664\u6389\u54ea\u4e9b\u5b57\u6bb5<\/p>\n<pre><code class=\"language-python\">class BookInfoSerializer(serializers.ModelSerializer):\n    &quot;&quot;&quot;\u56fe\u4e66\u6570\u636e\u5e8f\u5217\u5316\u5668&quot;&quot;&quot;\n    class Meta:\n        model = BookInfo\n        exclude = (&#039;image&#039;,)<\/code><\/pre>\n<p>3) \u663e\u793a\u6307\u660e\u5b57\u6bb5\uff0c\u5982\uff1a<\/p>\n<pre><code class=\"language-python\">class HeroInfoSerializer(serializers.ModelSerializer):\n    hbook = BookInfoSerializer()\n\n    class Meta:\n        model = HeroInfo\n        fields = (&#039;id&#039;, &#039;hname&#039;, &#039;hgender&#039;, &#039;hcomment&#039;, &#039;hbook&#039;)<\/code><\/pre>\n<p>4) \u6307\u660e\u53ea\u8bfb\u5b57\u6bb5<\/p>\n<p>\u53ef\u4ee5\u901a\u8fc7<strong>read_only_fields<\/strong>\u6307\u660e\u53ea\u8bfb\u5b57\u6bb5\uff0c\u5373\u4ec5\u7528\u4e8e\u5e8f\u5217\u5316\u8f93\u51fa\u7684\u5b57\u6bb5<\/p>\n<pre><code class=\"language-python\">class BookInfoSerializer(serializers.ModelSerializer):\n    &quot;&quot;&quot;\u56fe\u4e66\u6570\u636e\u5e8f\u5217\u5316\u5668&quot;&quot;&quot;\n    class Meta:\n        model = BookInfo\n        fields = (&#039;id&#039;, &#039;btitle&#039;, &#039;bpub_date&#039;\uff0c &#039;bread&#039;, &#039;bcomment&#039;)\n        read_only_fields = (&#039;id&#039;, &#039;bread&#039;, &#039;bcomment&#039;)<\/code><\/pre>\n<h2>3\u3001\u6dfb\u52a0\u989d\u5916\u53c2\u6570<\/h2>\n<p>\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528<strong>extra_kwargs<\/strong>\u53c2\u6570\u4e3aModelSerializer\u6dfb\u52a0\u6216\u4fee\u6539\u539f\u6709\u7684\u9009\u9879\u53c2\u6570<\/p>\n<pre><code class=\"language-python\">class BookInfoSerializer(serializers.ModelSerializer):\n    &quot;&quot;&quot;\u56fe\u4e66\u6570\u636e\u5e8f\u5217\u5316\u5668&quot;&quot;&quot;\n    class Meta:\n        model = BookInfo\n        fields = (&#039;id&#039;, &#039;btitle&#039;, &#039;bpub_date&#039;, &#039;bread&#039;, &#039;bcomment&#039;)\n        extra_kwargs = {\n            &#039;bread&#039;: {&#039;min_value&#039;: 0, &#039;required&#039;: True},\n            &#039;bcomment&#039;: {&#039;min_value&#039;: 0, &#039;required&#039;: True},\n        }\n\n# BookInfoSerializer():\n#    id = IntegerField(label=&#039;ID&#039;, read_only=True)\n#    btitle = CharField(label=&#039;\u540d\u79f0&#039;, max_length=20)\n#    bpub_date = DateField(allow_null=True, label=&#039;\u53d1\u5e03\u65e5\u671f&#039;, required=False)\n#    bread = IntegerField(label=&#039;\u9605\u8bfb\u91cf&#039;, max_value=2147483647, min_value=0, required=True)\n#    bcomment = IntegerField(label=&#039;\u8bc4\u8bba\u91cf&#039;, max_value=2147483647, min_value=0, required=True)<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u6a21\u578b\u7c7b\u5e8f\u5217\u5316\u5668 \u5982\u679c\u6211\u4eec\u60f3\u8981\u4f7f\u7528\u5e8f\u5217\u5316\u5668\u5bf9\u5e94\u7684\u662fDjango\u7684\u6a21\u578b\u7c7b\uff0cDRF\u4e3a\u6211\u4eec\u63d0\u4f9b\u4e86ModelSerial [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[394,399],"tags":[],"_links":{"self":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/5892"}],"collection":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5892"}],"version-history":[{"count":0,"href":"https:\/\/egonlin.com\/index.php?rest_route=\/wp\/v2\/posts\/5892\/revisions"}],"wp:attachment":[{"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5892"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5892"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/egonlin.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5892"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}