django - 显示两个字段以获得唯一的模型

时间:2015-11-26 00:38:55

标签: python django

我在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)

1 个答案:

答案 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)