我有一个相当复杂的自定义 Django 模型方法。它在管理界面中可见,我现在想让它在管理界面中也可排序。
我已经添加admin_order_field
按照推荐在上一个问题中 https://stackoverflow.com/questions/3491766/how-to-add-a-sortable-count-column-to-the-django-admin-of-a-model-with-a-many-to,但我不完全明白我还需要做什么。
class Book(models.Model):
id = models.IntegerField(primary_key=True)
title = models.CharField(max_length=200)
library_id = models.CharField(max_length=200, unique=True)
def current_owner(self):
latest_transaction = Transaction.objects.filter(book=self)[:1]
if latest_transaction:
if latest_transaction[0].transaction_type==0:
return latest_transaction[0].user.windows_id
return None
current_owner.admin_order_field = 'current_owner'
目前,当我单击管理界面中的 current_owner 字段时,Django 会给我
FieldError at /admin/books/book/
Cannot resolve keyword 'current_owner' into field
我还需要制作一个 BookManager 吗?如果是这样,我应该使用什么代码?这不是像上一个问题中的示例那样的简单计数,因此我们将不胜感激:)
Thanks!
Django 管理员不会根据方法的结果或任何其他不是模型字段(即数据库列)的属性对模型进行排序。排序必须在数据库查询中完成,以保持简单高效。
的目的admin_order_field
是将非字段属性的排序等同于字段属性的排序。
例如,有效值current_owner.admin_order_field
可能id
, title
or library_id
。显然,这些对您的目的来说都没有意义。
一种解决方案是非规范化并始终存储current_owner
作为模型字段Book
;这可以使用信号自动完成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)