Adn*_*nan 4 django-rest-framework
我有以下设置:
模型.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)
Run Code Online (Sandbox Code Playgroud)
序列化器.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',)
Run Code Online (Sandbox Code Playgroud)
查看.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)
Run Code Online (Sandbox Code Playgroud)
在代码片段中,我在视图的方法中设置了creator字段。由于是仅经过身份验证的视图,因此,我不想在报价创建请求(发布到)期间传递。QuoteModelperform_createQuoteListCreateViewcreator/quotescreator是序列化程序类的一部分,如果我没有通过创建者,发布请求将返回以下内容。"creator": [ "此字段为必填项。" ]”
因此,我的问题是 - 是否creator可以在发布请求时使参数可选?我不能添加null=true在creator,因为它是从模型的角度需要model.py领域。
提前致谢。
使固定
覆盖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',)
Run Code Online (Sandbox Code Playgroud)
根据您对问题的描述。具体来说:
我不想在报价创建请求期间传递创建者。
听起来您希望创建者字段是只读的,但在创建时填充。如果是这种情况,我建议您使用以下方法:
class QuoteModelSerializer(serializers.ModelSerializer):
creator = serializers.PrimaryKeyRelatedField(
read_only=True,
default=serializers.CurrentUserDefault()
)
class Meta:
model = Quote
fields = ('id', 'quote_number', 'description', 'creator', 'date_created')
read_only_fields = ('date_created',)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3914 次 |
| 最近记录: |