【发布时间】:2017-07-24 19:57:09
【问题描述】:
我有以下设置:
Models.py
class QuoteModel(models.Model):
"""
this model stores initial information for the Quote
"""
quote_number = models.CharField(max_length=20,
unique=True,
help_text="Please use the quote number from pms",)
description = models.CharField(max_length=200,
help_text="Enter description that you might find helpful")
creator = models.ForeignKey(User)
date_created = models.DateField(auto_now_add=True)
Serializer.py
# Serializers define the API representation.
class QuoteModelSerializer(serializers.ModelSerializer):
class Meta:
model = Quote
fields = ('id', 'quote_number', 'description', 'creator', 'date_created')
read_only_fields = ('date_created',)
View.py
class QuoteListCreateView(generics.ListCreateAPIView):
queryset = Quote.objects.all()
serializer_class = QuoteModelSerializer
permission_classes = (permissions.IsAuthenticated, )
def perform_create(self, serializer):
serializer.save(creator=self.request.user)
在sn-p中,我在视图的perform_create方法中设置QuoteModel的creator字段。由于QuoteListCreateView 是仅经过身份验证的视图,因此,我不想在报价创建请求期间传递creator(发布到/quotes)。 creator 是序列化程序类的一部分,如果我不通过创建者,post 请求将返回以下内容。
“创造者”:[
“这是必填栏。”
]"
因此,我的问题是——
无论如何在发布请求中使creator 参数可选?我无法在 model.py 中的 creator 字段上添加 null=true,因为从模型的角度来看这是必需的。
提前致谢。
修复
覆盖模型序列化程序中的 creator 属性并将 required 设置为 False 解决了该问题。
class QuoteModelSerializer(serializers.ModelSerializer):
creator = serializers.PrimaryKeyRelatedField(required=False, queryset=User.objects.all())
class Meta:
model = Quote
fields = ('id', 'quote_number', 'description', 'creator', 'date_created')
read_only_fields = ('date_created',)
【问题讨论】: