class Product(models.Model):
name = models.CharField(max_length = 127)
description = models.TextField()
code = models.CharField(max_length = 127)
def __unicode__(self):
return self.name
class ProductLot(models.Model):
product = models.ForeignKey(Product)
code = models.ForeignKey(Product)
lot_no = models.CharField(max_length = 30)
location = models.CharField(max_length = 127)
incoming = models.IntegerField()
commited = models.IntegerField()
available = models.IntegerField()
reorder = models.IntegerField()
created_date = models.DateField(auto_now_add=True)
def __unicode__(self):
return self.product.name + " - " + self.lot_no
我希望代码与产品外键相关联,因此您输入的代码与产品相关。
好吧我试着获得与产品对应的代码的下拉框。例如,在In Django中,我使用ForeignKey作为使用数据库中产品的下拉框,但它们也有相应的代码编号,这些代码编号在代码框中没有显示为下拉框。我在考虑嵌入式类代码?对不起,我是这个
的新手答案 0 :(得分:3)
如果您对一个模型有两个FK,则需要提供不同的相关名称:
product = models.ForeignKey(Product, related_name='lot_product')
code = models.ForeignKey(Product, related_name='lot_code')
related_name来自django docs:
<强> ForeignKey.related_name 强>
用于从相关对象到此对象的关系的名称。
有关完整说明和示例,请参阅related objects documentation。
答案 1 :(得分:1)
使code
成为查看product
def getCode(self):
return self.product and self.product.code
def setCode(self, value):
if self.product:
self.product.code = value
self.product.save()
code = property(getCode, setCode)
您将无法在查询中使用它,但这就是product__代码的用途。
答案 2 :(得分:0)
我认为你应该修改你的模型。现在,ProductLot
的每个实例都指向两个产品。我不确定这是你想要的。
这实际上取决于代码和产品之间的关系。一些想法:
每个Product
都有一个唯一的code
(1:1关系):
只需省略模型code
中名为ProductLot
的第二个ForeignKey。
每个Product
可能有多个不同的代码,但每个code
只指向一个Product
(1:n关系):
我会为您的代码添加另一个模型,例如:
class Product(models.Model):
name = models.CharField(max_length = 127)
...
class ProductCode(models.Model):
product = models.ForeignKey(Product)
...
class ProductLot(models.Model):
product_code = models.ForeignKey(ProductCode)
...
def correspondingProductName(self):
return self.product_code.product.name