我有两种模式:
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_bacard queryset获取联系人数据。
答案 0 :(得分:1)
使用get()
代替filter()
,如:
target_bacard = BusinessCard.objects.get(id=target_bacard_id)
target_bacard.contact_detail
答案 1 :(得分:1)
如果要访问与BusinessCard实例 bacard 呈1对1关系的Contacts实例,请使用您在 Contacts 中指定的相关名称:
contact = bacard.contact_detail
此外,您有一些误导性的名称:通讯录应该是联系人,因为此模型的实例仅代表一个联系人。其字段 businesscard_id 最好命名为 businesscard (请注意,在该情况下,表格列将自动在数据库级别称为 businesscard_id 相关businesssscard的id)因为在ORM中,当您访问它时,您会得到一个BusinessCard模型实例,而不仅仅是它的 id 。
答案 2 :(得分:0)
您尚未将相关模型(字段)参数传递给select_related()
target_bacard=BusinessCard.objects.filter(id=target_bacard_id).select_related('contact_detail')
假设BusinessCard的id
是唯一的,您可能希望使用...objects.get(id=target_bacard_id)
取代...objects.filter(id=target_bacard_id)
。无论如何,select_related()将在两种方式下工作。
select_related()用于保存数据库查询。 这是documentation