Django:列表\显示多个字段排序
我有以下代码:Django:列表\显示多个字段排序,django,django-models,django-admin,Django,Django Models,Django Admin,我有以下代码: #models.py class Repair(models.Model): products = models.ManyToManyField(Product) description = models.TextField() def products_list(self): return ', '.join([a.name for a in self.products.all()]) class Product(models.Mod
#models.py
class Repair(models.Model):
products = models.ManyToManyField(Product)
description = models.TextField()
def products_list(self):
return ', '.join([a.name for a in self.products.all()])
class Product(models.Model):
name = models.CharField(max_length=50,blank=False)
description = models.TextField(blank=True)
#admin.py
class RepairAdmin(admin.ModelAdmin):
list_display = ('products_list', 'description')
正如您所看到的,我使用一个带有联接的自定义模型字段来显示ModelAdmin list_display属性上所有与修复相关的产品,这是正确的
现在我的问题是:如何使自定义字段在列表上排序?我只想按多人关系的第一项排序。我尝试在模型上使用以下代码:
products_list.admin_order_field = 'products__name'
包括这一行,我可以激活字段排序,但它不能正常工作。。。当请求字段排序时,它在表上显示与其关系相同的记录重复
我一直在研究,我发现最接近解决方案的是:
但是我看不到将其应用到我的案例中的正确方法。您看到的是“表上的记录副本与它的关系一样多”,因为'products\uu\u name'
正在获得所有与修复相关的产品
如果要在ModelAdmin中按多个关系产品
上的第一项进行排序,那么最简单的方法可能是创建一个属性
,获取第一个产品,然后将其分配到管理订单字段
:
class Repair(models.Model):
products = models.ManyToManyField(Product)
description = models.TextField()
def products_list(self):
return ', '.join([a.name for a in self.products.all()])
# add a property which gets the name of the first product
@property
def first_product(self):
self.products.all().first() # first() was added in 1.6, otherwise use [0]
class RepairAdmin(admin.ModelAdmin):
list_display = ('products_list', 'description')
# use that property to only get the first product when ordering
products_list.admin_order_field = 'first_product__name'
感谢您的回复,我已尝试应用此代码,但admin\u order\u字段属性不接受“first\u product\u name”值。django抛出以下错误:FieldError位于/admin/support/repair/无法将关键字“first_product”解析到字段中。选项包括:描述、id、产品这将导致名称错误
,因为无法分配产品列表.管理订单字段
<代码>产品列表
必须是维修管理
的一种方法。但是,这里似乎仍然不能使用自定义属性。admin_order_字段必须是模型字段名,因为排序是由数据库完成的。因此,myfield
,相关字段名
等可以工作,但不能myproperty
。