Отключить поля только для чтения в ответе после публикации данных - PullRequest
0 голосов
/ 20 февраля 2019

Моя модель:

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?

1 Ответ

0 голосов
/ 20 февраля 2019

измените ваш сериализатор с

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')

Он будет работать, как вы ожидали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...