首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外键属性上的Django管理筛选器

问外键属性上的Django管理筛选器
EN

Stack Overflow用户
提问于 2010-03-04 21:49:51
回答 3查看 24.2K关注 0票数 27

我想通过外键的属性在管理更改列表中添加一个过滤器,例如

代码语言:javascript
复制
class Address(model.Models):
    street = models.CharField(max_length=25)        
    city = models.CharField(max_length=25)
    country = models.CharField(max_length=25)        

class Customer(models.Model):
    name = models.CharField(max_length=25)
    address = models.ForeignKey(Address)

假设在客户管理更改列表中,我想按城市和国家显示过滤器(因此显示特定国家或城市的所有客户)。

但是标准的list_filter()功能似乎只允许直接在模型上根据字段进行过滤,而不允许在其任何外键上进行过滤。我试过了:

代码语言:javascript
复制
list_filter = ("address__country",)

或

代码语言:javascript
复制
list_filter = ("address.country",)

但我总是得到相同类型的错误:

代码语言:javascript
复制
 'address__country' is not a callable or an attribute 

任何建议都将受到欢迎。是否有一些特殊的命名约定/语法允许对FK属性进行过滤?

EN

回答 3

Stack Overflow用户

发布于 2011-10-21 04:43:36

参见https://code.djangoproject.com/ticket/3400。它在django 1.3中工作正常:)

代码语言:javascript
复制
class Room(models.Model):
    house = models.ForeignKey(House)

    def __unicode__(self):
        return self.house.town.name

class Booking(models.Model):
    room = models.ForeignKey(Room)

    def __unicode__(self):
        return self.room.house.town.name

class BookingOpts(admin.ModelAdmin):
    list_filter = ('room__house__town',)
    raw_id_admin = ('room', )

admin.site.register(Town)
admin.site.register(House)
admin.site.register(Room)
admin.site.register(Booking, BookingOpts)
票数 23
EN

Stack Overflow用户

发布于 2010-03-04 22:46:09

我已经找到并测试了以下解决方案:

http://www.djangosnippets.org/snippets/1911/

它适用于ForeignKeys,但不适用于ManyToMany关系。

票数 1
EN

Stack Overflow用户

发布于 2010-11-13 03:41:53

我遇到了同样的问题,真的需要一个解决方案。我有一个解决方法,可以让你在FK相关的模型属性上创建一个过滤器。您甚至可以遍历多个FK关系。它创建了一个新的FilterSpec子类,这个子类是默认RelatedFilterSpec的子类,用于对ForeignKey字段进行筛选。

请参阅http://djangosnippets.org/snippets/2260/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2379702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档