在django model admin表单中仅显示其他模型的唯一记录

时间:2015-01-24 13:15:50

标签: mysql django django-admin

我有一个名为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,但我希望在BAdmin中获得唯一的电子邮件记录

例如模型A中的记录

  1. test2@xyz.com test2 xxx
  2. test2@xyz.com test2 xxx
  3. test3@zxc.com test3 xyz
  4. 我想在模型B admin中显示唯一记录

    1. test2@xyz.com test2 xxx
    2. test3@zxc.com test3 xyz
    3. 我尝试通过

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

      当我在上面写的时候,我得到DISTINCT ON字段不支持这个数据库后端(MySQL)错误是否有另一种方法来显示模型B中的唯一记录?

1 个答案:

答案 0 :(得分:1)

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

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