python - 如何在模型方法字段(不是模型字段)上对 Django 管理列进行排序

标签 python django sorting django-admin django-mongodb-engine

我按照本网站上的一些问题在基于模型方法的 Django 管理中添加了一个新列。它很好用。但是,我无法对该列进行排序。有没有办法在没有物理模型字段可供引用的模型方法字段上完成排序?

例如,一个方法查找与另一个模型的外键关系,并返回字符串。它们可以按字母顺序排序。另一个示例根据是否存在终止日期来检查模型是否处于事件状态。 (显然,我可以轻松地向模型添加一个 boolean 字段,但我想知道这是否可以通过仅使用方法来完成)。有没有办法对这些“列”进行排序?

更新:这是一个非 rel 后端 (mongo),因此外键查找将无法正常工作。

例如

class mymodel(models.Model):
    user = models.ForeignKey(User)
    termination_date = models.DateTimeField(blank=True, null=True)

    # Useful admin view methods
    # Returns whether the model is currently active.
    def is_active(self):
        if self.termination_date:
            return False
        else:
            return True

    is_active.boolean = True
    is_active.admin_order_field = 'termination_date' #<--- This activates sort, but not on the boolean, it sorts on the Model Field termination_date.

    # Returns the username from foreign key relationship
    def get_username(self):
        return User.objects.get(pk=self.user_id).username

    get_username.short_description = 'user'

最佳答案

管理员使用数据库对结果进行排序,因此如果您的方法不能直接映射到数据库字段(如您的 admin_order_field 示例所示),您将无法对其进行排序。

也就是说,您的 get_username 方法不是必需的 - 它可以替换为外键查找。从 1.3(我认为)开始,您可以在管理设置中使用标准的 __ 字段引用,例如:

list_display = ('is_active', 'user__username')

在这种情况下,该列将是可排序的,因为 user__username 是一个数据库列。我相信,如果您需要对用户名执行更多操作,而不仅仅是显示未经编辑的用户名,您可以将 user__username 设置为您的方法的 admin_order_field

关于python - 如何在模型方法字段(不是模型字段)上对 Django 管理列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21806707/

相关文章:

JavaFx-表格 View : How to use custom Comparator<T> for sorting?

Python:检测共享单词的字符串

python - 在 windows7 上使用 Python 2.7 将 CSV 转换为 Mysql

python - 选择值与特定字符 python 匹配的行

python - CryptoControl - Python Django 中的 Python 加密新闻 API 集成

python - FloatField 在 Django 中返回 str 对象而不是 Float

python - 如何使用 Selenium WebDriver 提取文本输入中输入的文本?

python - TypeError : int() argument must be a string, 类字节对象或数字,不是 'datetime.datetime'

angularjs - 使用 Angular JS 进行多列排序

java - Struts 2 显示标签排序和分页问题