gpt4 book ai didi

Django 休息框架 : Add hyperlink related field on sub model

转载 作者:行者123 更新时间:2023-12-04 15:02:06 24 4
gpt4 key购买 nike

我试图找出如何从关系模型中添加超链接相关字段。

假设我有以下模型:

class Model1(models.Model):
id = models.AutoField(primary_key=True)
model2 = models.OneToOneField(Model2, db_column='model2_id', related_name='model2_set', on_delete=CASCADE)

class Model2(models.Model):
id = models.AutoField(primary_key=True)
model3 = models.ForeignKey(Model3, db_column='model3_id',
related_name='+', null=True, blank=True, on_delete=FOREIGNKEY_PROTECT)

class Model3(models.Model):
id = models.AutoField(primary_key=True)
description = models.TextField(db_column='description', null=True, blank=True, verbose_name=_('Description'))

我有一个用于 Model1 和 Model3 但不是 Model2 的序列化器

我想要下面的输出

{
"id":123,
"model3":"http://example:123/api/model3/123"
}

但在我的 model1 序列化程序中,我不能简单地调用子模型的超链接相关字段,因为它无法识别源

class Model1ListSerializer(ValidateByModelSerializer):
id = serializers.IntegerField(read_only=True)
model3 = serializers.HyperlinkedRelatedField(
source='model2__model3',
queryset=Model3.objects.all(),
view_name='model3_rest-detail'
)

实现此目标的最佳方法是什么?

最佳答案

作为源,您可以使用 model2.model3 来访问该 ForeignKey 的对象:

class Model1ListSerializer(ValidateByModelSerializer):
id = serializers.IntegerField(read_only=True)
model3 = serializers.HyperlinkedRelatedField(
source=<b>'model2.model3'</b>,
queryset=Model3.objects.all(),
view_name='model3_rest-detail'
)

我建议在同一查询中也选择相关模型,因此将其用于:

Model1.objects<b>.select_related('model2', 'model2__model3')</b>

关于Django 休息框架 : Add hyperlink related field on sub model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66798829/

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