【问题标题】:Disable read only fields in the response after posting the data发布数据后禁用响应中的只读字段
【发布时间】:2019-07-14 00:41:49
【问题描述】:

我的模特:

class NewsID(models.Model):
    pass

class News(models.Model):
    newsId=models.ForeignKey(NewsID,related_name = 'News', on_delete=models.CASCADE)
    lang_code=models.CharField(max_length=2)
    headline=models.CharField(max_length=100)

class DefaultLanguage(models.Model):
    news_id  = models.ForeignKey(NewsID,related_name = 'default', on_delete=models.CASCADE)
    defaultLanguage_id = models.IntegerField(unique=True)

我的序列化器:

class NewsSerializer(QueryFieldsMixin,serializers.ModelSerializer):
    class Meta:
        model=News
        fields=('lang_code','headline')

class DefaultLanguageSerializer(QueryFieldsMixin,serializers.ModelSerializer):
    class Meta:
        model = DefaultLanguage
        fields = ('news_id  ','defaultLanguage_id ')
        read_only_fields = ['news_id  ','defaultLanguage_id ']

class NewsIDSerializer(QueryFieldsMixin,serializers.ModelSerializer):
    News = NewsSerializer(many=True)
    default_language = serializers.CharField(max_length=2,write_only=True)

    class Meta:
        model = NewsID
        fields = ('id','News','default_language')

我希望发布后的回复如下:

{
      "id": 10,
      "News": [
        {
          "lang_code": "en",
          "headline": "Breaking news"
        }
      ],
      "default_language": "en"
    }

现在我的回复如下:

{
  "id": 10,
  "News": [
    {
      "lang_code": "en",
      "headline": "Breaking news"
    }
  ]
}

现在我的回复有 news_id 和 defaultLanguage_id(只读字段) 我不希望在发布后回复只读字段。如何使用 Django 实现这一点?

【问题讨论】:

  • 请分享您收到的回复
  • 我已添加我的回复。请看一看。
  • 更新你的模型NewsID

标签: django django-models django-rest-framework django-views django-serializer


【解决方案1】:

更改您的序列化程序
class NewsIDSerializer(QueryFieldsMixin,serializers.ModelSerializer):
    News = NewsSerializer(many=True)
    default = DefaultLanguageSerializer(many=True,read_only=True)
    default_language = serializers.CharField(max_length=2,write_only=True)

    class Meta:
        model = NewsID
        fields = ('id','News','default','default_language')

class NewsIDSerializer(QueryFieldsMixin,serializers.ModelSerializer):
    News = NewsSerializer(many=True)
    default_language = serializers.CharField(max_length=2)

    class Meta:
        model = NewsID
        fields = ('id','News','default_language')

它将按您的预期工作。

【讨论】:

  • 它的工作。但是我的回复中没有出现 default_language。我在代码中编辑了我的回复
猜你喜欢
  • 2010-11-04
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多