Django rest framework удалить поле из API Создать форму - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть модель и набор представлений, связанные с этой моделью, вот мой код:

class EMAILTemplate(models.Model):
    """ Message SMS Template """
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    body = models.TextField()
    tokens = models.TextField()
    created = models.DateTimeField(auto_now_add=True)

    def save(self, *args, **kwargs):
        self.tokens = ",".join(re.findall(r'{{\s*(.*?)\s*}}', self.body))
        super().save(*args, **kwargs)

Я не хочу, чтобы полевые токены были в моей форме создания в Django.потому что, как вы видите, это будет извлечено из поля тела.но я хочу, чтобы в этом поле отображалась одна модель или список моделей.

и вот мой ModelSerializer:

class EmailTemplateSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = EMAILTemplate
        fields = ('name', 'body', 'user', 'tokens')

Ответы [ 2 ]

0 голосов
/ 22 сентября 2018

Вы можете перезаписать текущий to_representation метод

class EmailTemplateSerializer(serializers.HyperlinkedModelSerializer):

    def to_representation(self, obj):
        try:
            if self.context['view'].action in ['list', 'detail']:
                # get the original representation
                ret = super(serializers.HyperlinkedModelSerializer, self).to_representation(obj)
                # remove 'tokens' field
                ret.pop('tokens')
                return ret
        except KeyError:
            return super(serializers.HyperlinkedModelSerializer, self).to_representation(obj)
        return super(serializers.HyperlinkedModelSerializer, self).to_representation(obj)
0 голосов
/ 22 сентября 2018

Вы можете указать tokens как поле только для чтения:

class EmailTemplateSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = EMAILTemplate
        fields = ('name', 'body', 'user', 'tokens')
        read_only_fields = ('tokens',)
...