我在django中有一个模型,通过unique_together设置了“复合主键”。
对于下面的模型,我可以设置str()结果,以便显示两个字段,(名称和供应商)
class Product(models.Model):
name = models.CharField(max_length=255)
supplier = models.ForeignKey(Supplier)
# some other fields
def __str__(self):
return self.name
class Meta:
unique_together = ('name', 'supplier')
这样它也会出现在相关的模型中,例如。
class ProductPrices(models.Model):
name = models.ForeignKey(Product)
答案 0 :(得分:1)
unique_together
不是复合主键。这只是一个复合约束。您的模型仍然具有隐藏的,自动生成的id
字段,这是真正的主键。
是的,您可以设置__str__
输出您想要的任何内容,只要它是一个字符串即可。它不一定是唯一的,但它确实有帮助。 (顺便说一下,我不确定你使用的是哪种Python,或者Python 3中是否有这种变化,但建议使用__unicode__
代替__str__
。)
def __unicode__(self):
return "{0} (from {1})".format(self.name, self.supplier)
但同样,这不是你真正的主键。要看到它(不是真的推荐,因为它是噪音):
def __unicode__(self):
return "{0} (from {1}) (#{2})".format(self.name, self.supplier, self.id)