【问题标题】:Django admin filterDjango 管理过滤器
【发布时间】:2013-07-26 16:39:13
【问题描述】:

我有一个模型的多个实例,每个实例都有一个相关的电子邮件地址。但是,多个实例具有相同的连接电子邮件地址,但是当我将filter['email'] 放入我的admin.py 时,我会得到一长串实例的电子邮件,即在多个情况下同一电子邮件的多个副本。

有没有办法可以删除多次列出的电子邮件?或者将过滤器视图自定义为更好的方式? (可能是下拉菜单?)

我目前没有ManyToManyField 关系或类似的关系。我的数据库中只有nameemail 字段的实例。我的 models.py 看起来像这样:

import ldapdb.models
from ldapdb.models.fields import CharField, IntegerField, ListField

class Item(ldapdb.models.Model):
    item = CharField(db_column='item', max_length=30, primary_key=True, unique=True)
    email = CharField(db_column='mail', max_length=20)

我的 admin.py 看起来像这样:

from items.models import Item
from django.contrib import admin

class ItemAdmin(admin.ModelAdmin):
    readonly_fields = ('email',)
    list_display = ('item', 'email')
    list_filter = ['email']
    search_fields = ['item']

admin.site.register(Item, ItemAdmin)

显然,我一直在查看 https://docs.djangoproject.com/en/1.3/ref/contrib/admin/,但通过自定义管理员的过滤器视图,我看不到太多。

【问题讨论】:

    标签: django django-admin django-admin-filters


    【解决方案1】:

    你能发布一些你的代码吗?我不完全确定我理解实例与您的电子邮件之间的关系 - 它是电子邮件字段吗?不同型号的 ForeighKey?如果不是多对多或类似的关系,怎么会有多个?以及如何在后台进行过滤?

    编辑 好的,现在我明白了这个问题。你想要的是不可能的。请参阅 django 管理站点,它们是相同的电子邮件这一事实并不重要,因为它仍然是不同的对象。如果不指定该字段是唯一的或与管理站点代码混淆,则无法解决此问题。

    更好的解决方案是在管理模型中将电子邮件配置为可搜索,然后当您搜索电子邮件 example@example.com 时,它会返回所有匹配项。

    另一个很好的解决方案是让 email 成为一个不同的模型,并通过 ManyToMany 关系将它链接到 Item 模型。然后,您创建一个 EmailAdmin,其方法向您显示每封电子邮件的所有相关项目。

    这一切都取决于您实际需要什么。最终,您可能想要编写自己的视图或在管理站点中乱用以将其修改为您需要的内容。

    此外,您可能希望将电子邮件从 CharField 更改为 EmailField。希望这会有所帮助!

    【讨论】:

    • 首先我的数据库在 LDAP 中,因此没有可用的 ForeignKey 资料。我的数据库只有很多对象,字段为nameemail,而且很多对象都关联了相同的电子邮件。在管理员中,我已经包含了list_filter = ['pub_date']....这样的行>
    • 那么问题出在哪里?你自己说有些电子邮件会重复出现,所以你会看到它不止一次是有道理的。我真的建议您发布一些代码,以便我更好地理解您遇到的问题
    • 感谢您尝试帮助我,但我不明白您希望看到的代码的哪一部分会对您有所帮助。 models.py 本身? (这只是定义名称和电子邮件)。 admin.py 只是一个沼泽标准管理文件,带有 list_filter=['email']
    • 两个都很棒。
    • 谢谢 - 我认为 LDAP 没有 EmailField 属性?
    猜你喜欢
    • 2020-09-15
    • 2011-11-09
    • 2011-02-24
    • 2021-01-01
    • 2011-11-13
    • 2011-03-05
    • 2011-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多