【问题标题】:DRF serialize through related models dataDRF通过相关模型数据序列化
【发布时间】:2021-03-23 18:12:35
【问题描述】:

我遇到了 DRF 序列化问题。我的主要目标是创建一个具有相关字段的实例,但不是提供相关模型id 我想使用它的其他独特字段。同时,当我将序列化模型以呈现它(而不是创建)时,我想获得默认的相关字段值。这是一个例子

class Comment(models.Model):

    description = models.TextField()
    creator = models.ForeignKey(User, ...)


x = Creator.objects.get(pk=1)
print(x.unique_field)
> 'some data'
client.post('comment-detail', data={
                                     'description': 'some description',
                                     'creator_unique_field': 'some data'
                                    })
# this should create a comment while using some unique creators field
# which is not pk or id

print(client.get('comment-detail', data={'pk':1}))
{
  'description' 'some description',
  'creator': 1,
}
        

我不知道我是否应该更改 ViewSet 的 create()retrieve() 的模型序列化程序。我从 DRF 开始,无法理解它

【问题讨论】:

    标签: django serialization django-rest-framework django-rest-viewsets


    【解决方案1】:

    重写序列化程序的创建方法是一个很好的地方。可以在那里查询unique_field用户。

    class CommentView(viewsets.ModelViewSet):
        def perform_create(self, serializer):
            serializer.save(creator=self.request.user)
    
    class CommentSerializer(serializers.Serializer):
    
        creator_unique_field = serializer.SomeField()        
    
        def create(self, validated_data):
            creator = Creator.objects.get(unique_field=validated_data['creator_unique_field'])
            comment, created = Comment.objects.get_or_create(creator=creator, **validated_data)
    
            return comment
    
        class Meta:
            model = Comment
            fields = '__all__'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-30
      • 1970-01-01
      相关资源
      最近更新 更多