1

我有一个模型的多个实例,每个实例都有一个相关的电子邮件地址。但是,多个实例具有相同的连接电子邮件地址,但是当我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/,但通过自定义管理员的过滤器视图,我真的看不到太多。

4

1 回答 1

1

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

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

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

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

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

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

于 2013-07-26T12:17:39.427 回答