从表单中删除ModelChoiceField中的重复数据

时间:2018-04-17 21:09:20

标签: django django-models django-forms

我有这段代码forms.ModelChoiceField(queryset=ModelClass.objects.all()),但是它显示了所有的值,除了重复之外,有没有办法从表单中的ModelChoiceFiel中删除重复数据,但不能在模型中删除?

Models.py

class SchoolYear(models.Model):
    number=models.IntegerField() 

class Year(models.Model):
    year=models.IntegerField()


class Course(models.Model):
    name=models.CharField(max_length=50)
    year = models.ForeignKey(year, on_delete=models.CASCADE)
    schoolYear= models.ForeignKey(SchoolYear,on_delete=models.CASCADE)

Forms.py

class InfoForm(forms.Form):
     course=forms.ModelChoiceField(queryset=Course.objects.all())

1 个答案:

答案 0 :(得分:1)

你可以这样做,你将有一个查询集,其中所有的课程名称都是重复的值,不方便的是它不是实例本身的问题。

Course.objects.values_list('name',flat=True).distinct()

其他方式,如果您想拥有课程实例列表:

courses_list = []
for name in Course.objects.values_list('name', flat=True).distinct():
    courses_list.append(Course.objects.filter(pk__in=Course.objects.filter(name=name).values_list('id', flat=True)).first())