在Django中,如何基于父模型类的字段对子模型类的实例进行排序?

时间:2013-08-09 11:16:22

标签: django django-models foreign-keys

以下是代码:

class Brand(models.Model):
    brand_name = models.CharField(max_length=200)
    def __unicode__(self):
        return self.brand_name

class Product(models.Model):
    product = models.ForeignKey(Brand)
    product_name = models.CharField(max_length=300)
    class Meta:
        ordering = ['product_name']
    def __unicode__(self):
        return self.product_name

假设我有2个品牌,每个品牌有2个产品:佳能(相机,打印机)和三星(笔记本电脑,平板电脑)。当我创建Product的实例时,我将能够在管理页面上按名称对它们进行排序:相机,笔记本电脑,打印机,平板电脑。到现在为止还挺好。 但我真正想做的是按[品牌+产品]对它们进行排序,因此排序列表应如下所示:'佳能 - 相机','佳能 - 打印机','三星 - 笔记本电脑','三星 - 平板电脑”。

为了做到这一点,我必须以某种方式从Product类中访问brand_name字段的值。这可能吗?如果可能,怎么样?或者是否有其他/更好的方法来实现这种类型的排序?

3 个答案:

答案 0 :(得分:0)

你试过了吗?

class Meta:
    ordering = ['product_name', 'product'] #or ordering = ['product', 'product_name']
def __unicode__(self):
    return str(self.product_name) + " - " +str(self.product)

答案 1 :(得分:0)

您可以在代码somemodel.brand.brand_name中访问它,在过滤器/查询中以brand__brand_name访问它。

答案 2 :(得分:-2)

找到解决方案:

class Brand(models.Model):
    brand_name = models.CharField(max_length=200)
    class Meta:
        ordering = ['brand_name']
    def __unicode__(self):
        return self.brand_name

class Product(models.Model):
    product = models.ForeignKey(Brand)
    product_name = models.CharField(max_length=300)
    class Meta:
        ordering = ['product', 'product_name']
    def __unicode__(self):
        return self.product_name # or return str(self.product_name) + ' - ' +str(self.product)