gpt4 book ai didi

django - 使相当复杂的 Django 模型方法可在管理员中排序?

转载 作者:行者123 更新时间:2023-12-01 02:51:57 24 4
gpt4 key购买 nike

我有一个相当复杂的自定义 Django 模型方法。它在管理界面中可见,我现在也想让它在管理界面中排序。

我已添加 admin_order_field如推荐 in this previous question ,但我不完全明白我还需要做什么。

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 吗?如果是这样,我应该使用什么代码?这不像上一个问题中的示例那样简单 Count,因此将不胜感激 :)

谢谢!

最佳答案

Django 管理员不会根据方法或任何其他不是模型字段(即数据库列)的属性的结果对模型进行排序。排序必须在数据库查询中完成,以保持简单和高效。
admin_order_field的目的是将非字段属性的排序等同于作为字段的事物的排序。

例如,有效值 current_owner.admin_order_field可能是 id , titlelibrary_id .显然,这些都对您的目的没有意义。

一种解决方案是非规范化并始终存储 current_owner作为 Book 上的模型字段;这可以使用信号自动完成。

关于django - 使相当复杂的 Django 模型方法可在管理员中排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4625414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com