有人知道如何根据模型字段的比较 - F() 表达式在管理员中进行过滤吗?
假设我们有以下模型:
class Transport(models.Model):
start_area = models.ForeignKey(Area, related_name='starting_transports')
finish_area = models.ForeignKey(Area, related_name='finishing_transports')
现在,我想做的是制作管理过滤器,它允许过滤区域内和跨区域对象,其中区域内是那些,其 start_area 和 finish_area 相同,而 trans-area 是其他对象。
我试图通过创建自定义 FilterSpec 来实现这一点,但有两个问题:
第二个问题可以通过定义自定义 ChangeList 类来解决,但我认为没有办法解决第一个问题。
我还尝试通过重载 queryset 方法并将额外的上下文发送到更改列表模板直接在 ModelAdmin 实例中“模拟”过滤器,其中过滤器本身将被硬编码和手动打印。不幸的是,似乎存在问题,Django 取出我的 GET 参数(用于过滤器链接),因为它们对 ModelAdmin 实例是未知的,相反,它只放置了 ?e=1 ,这应该表示一些错误。
提前感谢任何人。
编辑 : 似乎计划在下一个 Django 版本中实现该功能,请参阅 http://code.djangoproject.com/ticket/5833 .不过,有人知道如何在 Django 1.2 中实现这一点吗?
最佳答案
这不是最好的方法*,但它应该有效
class TransportForm(forms.ModelForm):
transports = Transport.objects.all()
list = []
for t in transports:
if t.start_area.pk == t.finish_area.pk:
list.append(t.pk)
select = forms.ModelChoiceField(queryset=Page.objects.filter(pk__in=list))
class Meta:
model = Transport
关于使用 F() 表达式的 Django 管理过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4265713/