gpt4 book ai didi

python - DJANGO - 使用 REST 框架在 POST 方法上使用 genericforeignkey 保存数据

转载 作者:行者123 更新时间:2023-11-30 23:18:48 26 4
gpt4 key购买 nike

我想在我的数据库中保存“反馈”对象的实例,反馈对象有一个指向“客户端”的外键,以及一个通用外键,因为它可以与“供应商”或“商店”相关,我做了2允许 POST 的 url,一个为供应商创建反馈,另一个为商店创建反馈,两者都接收主键。

类图示例: Class Diagram

这是我的方法:

@api_view(['POST'])
def store_feedback_view(request, store_id):
serializer = FeedbackSerializer(data=request.DATA)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

序列化器是有效的,但在尝试保存时出现以下错误:

NOT NULL constraint failed: feedback_feedback.object_id
NOT NULL constraint failed: feedback_feedback.content_type_id

发生这种情况是因为反馈对象的 genericforeignkey 不为 NULL:

class Feedback(models.Model):
comment = models.TextField(verbose_name='Comment', max_length=300, blank=True, null=True)
client = models.ForeignKey(Client, verbose_name="Client feedback", related_name="feedbacks")

limit = models.Q(app_label='core', model='store') | models.Q(app_label='core', model='vendor')
content_type = models.ForeignKey(ContentType,
limit_choices_to=limit)
object_id = models.PositiveIntegerField(verbose_name="Related object ID")
content_object = GenericForeignKey('content_type', 'object_id')

class Meta:
app_label = 'feedback'

如何在 POST 方法上创建反馈对象?

这是 feedback/store/(?P<store_id>\d+)/ 上的请求示例

{
"comment": "Nice store",
"client": 1
}

最佳答案

将存储设置为serializer.object:

@api_view(['POST'])
def store_feedback_view(request, store_id):
serializer = FeedbackSerializer(data=request.DATA)
if serializer.is_valid():
# this line added:
serializer.object.content_object = get_object_or_404(Store, id=store_id)
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

关于python - DJANGO - 使用 REST 框架在 POST 方法上使用 genericforeignkey 保存数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26486992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com