【问题标题】:Display only unique records in django model admin form other model仅在 django 模型管理表单中显示其他模型中的唯一记录
【发布时间】:2015-03-23 10:22:31
【问题描述】:

我有一个名为 A 的模型,其中包含以下字段

class A(models.Model):
     f_name = models.CharField(max_length=30, null=True, blank=True)
     l_name = models.CharField(max_length=30, null=True, blank=True)
     email = models.EmailField(unique=False)
     phone = models.CharField(max_length=30, null=True, blank=True)

现在我正在从模型 A 创建另一个模型 B

class B(A):
    class Meta:
        proxy = True

B 的管理类是

class BAdmin(admin.ModelAdmin):
     list_display = ('email','first_name', 'last_name', 'phone')

我只想在管理站点中的模型 B 中显示与模型 A 不同的电子邮件?

注意:我不想打扰模型 A 但我想在 BAdmin 中获得唯一的电子邮件记录

例如模型 A 中的记录

  1. test2@xyz.com test2 xxx
  2. test2@xyz.com test2 xxx
  3. test3@zxc.com test3 xyz

我想在模型 B 管理员中显示唯一记录

  1. test2@xyz.com test2 xxx
  2. test3@zxc.com test3 xyz

我尝试通过

在 BAdmin 中编写查询集
def queryset(self, request):
    qs = super(BAdmin, self).queryset(request)
    qs = qs.distinct('email')

    return qs

当我在上面写的时候,我得到 DISTINCT ON fields is not supported by this database backend(MySQL) 错误是否有另一种方法来显示模型 B 中的唯一记录?

【问题讨论】:

    标签: mysql django django-admin


    【解决方案1】:

    您可以在ModelAdmin 类中使用queryset() 方法来过滤您想要的内容:

    class BAdmin(admin.ModelAdmin):
        list_display = ('email', 'first_name', 'last_name', 'phone')
    
        def queryset(self, request):
            qs = super(BAdmin, self).queryset(request)
            qs = qs.distinct('email')
    
            return qs
    

    【讨论】:

    猜你喜欢
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2016-09-16
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    相关资源
    最近更新 更多