以下是代码:
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字段的值。这可能吗?如果可能,怎么样?或者是否有其他/更好的方法来实现这种类型的排序?
答案 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)