【问题标题】:Django can't eliminate duplicated entries with set (mysql)Django 无法使用 set (mysql) 消除重复条目
【发布时间】:2013-04-24 23:00:24
【问题描述】:

我在代码上有一个a 列表,我想消除重复的条目。 我在这里看到了一个非常干净的方法:http://love-python.blogspot.pt/2008/09/remove-duplicate-items-from-list-using.html 我正在使用 mysql

但是当我访问该页面时,我得到了这个错误:'list' object has no attribute 'all' 我不知道这是从哪里来的!

forms.py:

from testApp.models import Ficha_medico
from django.forms import ModelForm
from django    import forms

class MenuForm(ModelForm):
    a = Ficha_medico.objects.values_list('zona', flat=True)
    a = list (set(a))
    zona = forms.ModelChoiceField(queryset=a)
    class Meta:
        model = Ficha_medico

任何帮助表示赞赏

【问题讨论】:

    标签: python mysql django list filter


    【解决方案1】:

    错误消息告诉你它来自哪里。

    列表不是查询集。您不能将其作为字段的查询集参数传递。

    要消除查询集中的重复项,请使用.distinct()

    【讨论】:

    • 我收到此错误:此数据库后端不支持 DISTINCT ON 字段
    • 在 django 文档上说你只能使用 PostgreSQL 指定字段我正在使用 mysql
    【解决方案2】:

    .values_list() 返回一个 list 对象,而不是查询集。

    显然,如果您使用的是 PostgreSQL,这样的事情会起作用:

    a = Ficha_medico.objects.distinct('zona')
    

    对于其他人,我怀疑有更好的方法,但这会起作用:

    class MenuForm(ModelForm):
        items = Ficha_medico.objects.values_list(('id', 'zona'), flat=True)
        # get a single 'id' per 'zona'
        # --> since we don't know how many there are cycle through all
        # --> note: this will overwrite existing values, but doesn't seem to matter.
        uniques = {z: i for i, z in items}
    
        # re-query to retrieve only the necessary number of unique zona values
        qs = Ficha_medico.objects.filter(id__in=uniques.values())
    
        zona = forms.ModelChoiceField(queryset=qs)
        class Meta:
            model = Ficha_medico
    

    【讨论】:

    • 我收到此错误:DISTINCT ON fields is not supported by this database backend
    • 在 django 文档上说你只能使用 PostgreSQL 指定字段
    猜你喜欢
    • 2010-12-29
    • 2021-01-22
    • 2015-05-21
    • 2014-08-01
    • 2020-09-06
    • 2013-07-12
    • 2014-08-17
    • 2012-04-10
    相关资源
    最近更新 更多