【问题标题】:DJANGO ModelAdmin SQLLite error : DISTINCT ON fields is not supported by this database backendDJANGO ModelAdmin SQLLite 错误:此数据库后端不支持 DISTINCT ON 字段
【发布时间】:2015-04-13 17:15:59
【问题描述】:

我的模特是

class Contrat(models.Model):
    Procedure = models.ForeignKey(Procedure)
    Contrat_text = models.CharField(max_length=150)

    def __str__(self):
        return self.Contrat_text

Class Document(models.Model):
    Contrat = Contrat.objects.order_by('Contrat_text').distinct('Contrat_text')
    isContrat = models.BooleanField(('Contrat'), default=True)
    isCdC = models.BooleanField(('Cahier des Charges'), default=False)
    isCR = models.BooleanField(('Cahier de Recette'), default=False)

    def __str__(self):
        return self.Contrat

我的管理模型是:

class DocumentAdmin(admin.ModelAdmin):
        fields = ('Contrat', 'isContrat', 'isCdC', 'isCR')
        list_display = ('id','isContrat', 'isCdC', 'isCR')
        ordering = ('id',)

    admin.site.register(Document, DocumentAdmin)

但我得到的是:

DISTINCT ON fields is not supported by this database backend

有人知道如何正确创建模型管理员吗?

【问题讨论】:

    标签: django distinct django-queryset modeladmin


    【解决方案1】:

    你的问题在于这一行

    Contrat = Contrat.objects.order_by('Contrat_text').distinct('Contrat_text')
    

    .distinct() 不能与 sqlite3 一起使用,因此您必须切换到 postgres 之类的东西才能使用它或修改您的查询。还有Each field in your model should be an instance of the appropriate Field class.,所以你错误地定义了你的Contrat模型字段。

    【讨论】:

    • @Welenofsky 但是我用的是 MySQL,为什么还有这个问题?
    • @aircraft 你需要在 distinct 中删除 'contrat_text'
    • Contrat = Contrat.objects.order_by('Contrat_text').distinct()
    【解决方案2】:

    对于 mysql: 你可以使用Model.objects.values_list('field').order_by('field').distinct()

    【讨论】:

      猜你喜欢
      • 2020-05-01
      • 2019-06-12
      • 2022-01-19
      • 1970-01-01
      • 2014-02-28
      • 1970-01-01
      • 2016-09-05
      • 2017-03-10
      • 1970-01-01
      相关资源
      最近更新 更多