如何制作不同领域的外键django

  • 本文关键字:django 何制作 python django
  • 更新时间 :
  • 英文 :


hi我试图使用to_field从不同字段生成一个新的外键,但它返回product值,而不是no_invoice

class Model1(models.Model):
admin = models.ForeignKey(User,on_delete=models.CASCADE)
product = models.ForeignKey(Products,on_delete=models.CASCADE)
no_invoice = models.IntegerField(unique=True)
def __str__(self):
return self.product.name
class Model2(models.Model):
admin = models.ForeignKey(User,on_delete=models.CASCADE)
invoice = models.ForeignKey(Model1,to_field='no_invoice',on_delete=models.CASCADE)

我还有什么要补充的吗?感谢

ForeignKey.to_field关系所在的相关对象上的字段。默认情况下,Django使用相关对象的主键。如果引用其他字段,则该字段必须具有unique=True。

就你而言,没有什么可补充的。

当您尝试获取外键字段时,它会返回QuerySet 中所有相关的Model1对象

您的str方法错误。你必须自己去拿。像低于

def __str__(self):
return self.product.name

默认情况下,此方法返回模型对象的id(主键(当您尝试打印或呈现外键字段时,由于str方法正在返回产品名称,因此会返回Model1对象的字符串表示,即产品名称。

相反,如果你想获得你的无发票字段

您可以将str替换为


def __str__(self):
return self.no_invoice

您可以访问整个对象。你也可以在你的视图中这样做.py.

m2_object = Model2.objects.all().first()
print(m2_object.invoice.no_invoice) #this will give your no_invoice value

参考:https://docs.djangoproject.com/en/3.0/ref/models/fields/

既然no_invoice是唯一的,而且看起来像Model1的序列号,你能把它作为主键吗?像这样:

class Model1(models.Model):
admin = models.ForeignKey(User,on_delete=models.CASCADE)
product = models.ForeignKey(Products,on_delete=models.CASCADE)
no_invoice = models.IntegerField(primary_key=True)
def __str__(self):
return self.product.name #self should be included
class Model2(models.Model):
admin = models.ForeignKey(User,on_delete=models.CASCADE)
invoice = models.ForeignKey(Model1,on_delete=models.CASCADE)

PS:如果从Model2到Model1的关系是OneToOne,您也可以考虑使用OneToOne关系而不是外键。

最新更新