如何在父模型查询中获取子模型相关数据

2024-06-16 12:47:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个模型:

class BusinessCard(models.Model):
      name = models.CharField(_("name"),null=True,max_length=50)


class Contacts(models.Model):
      businesscard_id = models.OneToOneField(BusinessCard,null=True,blank=True,related_name='contact_detail',db_column="businesscard_id")
      bcard_json_data = JsonField(null=True)

我只想使用名片模型访问联系人模型数据: target_bacard=BusinessCard.objects.filter(id=target_bacard_id).select_related()

当我们访问target_bacard.contact_detail时,它会给出关键错误。
如何使用target\u bacard queryset获取联系人数据。你知道吗


Tags: name模型idtruetargetmodelmodelscontact
3条回答

您尚未传递相关模型(字段)参数以选择\u related()

target_bacard=BusinessCard.objects.filter(id=target_bacard_id).select_related('contact_detail')

假设名片的id是唯一的,您可能希望使用...objects.get(id=target_bacard_id)代替...objects.filter(id=target_bacard_id)。无论如何,select\ u related()将在两种方式上都起作用。你知道吗

select\u related()用于保存数据库查询。 这是documentation

使用get()而不是filter(),如:

target_bacard = BusinessCard.objects.get(id=target_bacard_id)
target_bacard.contact_detail

如果要访问与名片实例呈1对1关系的Contacts实例,请使用在Contacts中指定的相关名称:

contact = bacard.contact_detail

此外,您还有一些误导性的名称:Contacts应该是Contact,因为此模型的实例仅表示一个联系人。它的字段businesscard\u id最好命名为businesscard(注意,在这种情况下,表列将在数据库级别自动调用businesscard\u id,并存储相关businesscard的id),因为在ORM中,访问它时会得到一个businesscard模型实例,不仅仅是它的id。你知道吗

相关问题 更多 >