List正在运行但是post在Django Rest Framework中的嵌套序列化器中不起作用

问题描述 投票:0回答:2

这是我的代码:

models.朋友

class Kitchen(models.Model):
kitchen_name = models.CharField(max_length = 100)
state = models.CharField(max_length = 40, )
city = models.CharField(max_length = 40)

def __str__(self):
    return self.kitchen_name


class AssignAudit(models.Model):
kitchen = models.ForeignKey(Kitchen, on_delete = models.SET_NULL, null = True)
assigned_date = models.DateTimeField(default = timezone.now)
assigned_by = models.ForeignKey(User, on_delete = models.SET_NULL, null =  True, related_name = 'assigned_audits')

class KitchenAudit(models.Model):
assign_audit = models.ForeignKey(AssignAudit, on_delete = models.SET_NULL, null = True)
question = models.ForeignKey(Question, on_delete = models.SET_NULL, null = True)
total_images = models.IntegerField(null = True, blank = True)
marks_scored = models.IntegerField(null=True,blank=True)
comment = models.CharField(max_length = 300, null = True, blank = True)

serialize认识.朋友

class KitchenSerializer(serializers.ModelSerializer):
class Meta:
    model = Kitchen
    fields = '__all__'

class AssignAuditSerializer(serializers.ModelSerializer):
kitchen = KitchenSerializer()
class Meta:
    model = AssignAudit
    fields = '__all__'

def create(self, validated_data):
    assign_audit = AssignAudit.objects.create(**validated_data)        
    questions = Question.objects.all()
    for question in questions:
        kitchen_audit = KitchenAudit.objects.create(question=question,assign_audit=assign_audit)
        for images in range(question.no_of_images):
            KitchenAuditImage.objects.create(kitchen_audit=kitchen_audit)
    return assign_audit

views.朋友

class AssignAuditSerializerListCreate(ListCreateAPIView):
serializer_class = AssignAuditSerializer
queryset = AssignAudit.objects.all()

    def list(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())
    page = self.paginate_queryset(queryset)
    if page is not None:
        serializer = self.get_serializer(page, many=True)
        return self.get_paginated_response(serializer.data)
    serializer = self.get_serializer(queryset, many=True)
    return Response({'audit_assign':serializer.data})

我想结合上面的两个表,使用django-rest-framework在一个API中显示它。 GET方法工作正常但是当我正在做POST方法时,它说我必须提供厨房价值。

{
    "kitchen": [
        "This field is required."
    ]
}
python django api django-rest-framework serializer
2个回答
0
投票

你已经设置了read_only = True,这就是为什么它在发布,放置或补丁时忽略了厨房。它显然是read_only所以你不能发布它。

作为替代方案,您可以在视图中覆盖get_serializer_class()函数以实现此目的。

enter image description here


0
投票

其中一个可能的解决方案是将kitchen设为只读。

kitchen = KitchenSerializer(read_only=True)
© www.soinside.com 2019 - 2024. All rights reserved.