Django Rest Framework:在子模型上添加超链接相关字段
Django Rest Framework: Add hyperlink related field on sub model
我正在尝试了解如何从关系模型中添加超链接相关字段。
假设我有以下型号:
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'
)
我建议在同一个查询中也 select 相关模型,因此将其用于:
Model1.objects<b>.select_related('model2', 'model2__model3')</b>
我正在尝试了解如何从关系模型中添加超链接相关字段。
假设我有以下型号:
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'
)
我建议在同一个查询中也 select 相关模型,因此将其用于:
Model1.objects<b>.select_related('model2', 'model2__model3')</b>