Django 无法分配-必须是实例

Django 无法分配-必须是实例,django,django-models,django-forms,Django,Django Models,Django Forms,我的django应用程序中有以下表单。我重写了构造函数,因此我可以限制“classes”字段中出现的选项,以便只显示学生注册的类 #forms.py class TestForm(forms.ModelForm): def __init__(self, *args, **kwargs): self.user = kwargs.pop('user', None) super(TestForm, self).__init__(*args, **kwargs)

我的django应用程序中有以下表单。我重写了构造函数,因此我可以限制“classes”字段中出现的选项,以便只显示学生注册的类

#forms.py
class TestForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        super(TestForm, self).__init__(*args, **kwargs)
        classes = [Classes.objects.filter(students__username=self.user.username)]
        class_list = list()
        for c in classes:
            for single_class in c:
                cl = Classes.objects.get(id=single_class.id)
                class_list.append([cl, single_class])
        self.fields['classes'] = forms.ChoiceField(choices=class_list)

    class Meta:
        model = Test
        fields = ('classes', 'name')
但是,这样做会给我一个无法分配“Class1234:testclass”-“Test.classes”必须是“classes”实例。当我打印class_列表时,我得到以下信息:

[[<Classes: Class1234: Test class>, <Classes: Class1234: Test class>],[<Classes: Testing: 2nd class>, <Classes: Testing: 2nd class>],[<Classes: 3rd: Class>, <Classes: 3rd: Class>]]

这是一个列表列表,这可能就是它失败的原因。但无论如何,你的问题有一个更优雅的解决方案

无需在
\uuuu init\uuuu
中执行此操作。只需覆盖表单中的
字段并定义查询集。阅读更多关于它的信息

并且如果这也是一个在数据库级上应用的限制,请考虑使用<代码> LimITyCoeCeSixto <代码>。阅读相关信息。

[,],[,],[,],[,]
这是一个列表列表,这可能就是它失败的原因。但无论如何,你的问题有一个更优雅的解决方案

无需在
\uuuu init\uuuu
中执行此操作。只需覆盖表单中的
字段并定义查询集。阅读更多关于它的信息


并且如果这也是一个在数据库级上应用的限制,请考虑使用<代码> LimITyCoeCeSixto <代码>。阅读相关内容。

谢谢你的帮助-正是我所期待的感谢你的帮助-正是我所期待的
#models.py
class UserProfile(models.Model):
    user = models.OneToOneField(User)
    teacher = models.BooleanField(default=False)

    def __str__(self):
        return "{0} {1}".format(self.user.first_name, self.user.last_name)


class Classes(models.Model):
    classcode = models.CharField(max_length=15)
    classname = models.TextField()
    students = models.ManyToManyField(User)

    def __str__(self):
        return "{0}: {1}".format(self.classcode, self.classname)


class Test(models.Model):
    classes = models.ForeignKey(Classes, on_delete=models.CASCADE)
    name = models.TextField(max_length=100)
    points = models.ManyToManyField(User, default=0)

    def __str__(self):
        return "{0}".format(self.name)

#views.py
def add_test(request):
    added = False
    form = TestForm(user=request.user)
    if request.method == "POST":
        form = TestForm(request.POST, user=request.user)
        if form.is_valid():
            form.save()
            added = True
    return render(request, 'site/addtest.html', {'form': form, 'added': added})
[[<Classes: Class1234: Test class>, <Classes: Class1234: Test class>],[<Classes: Testing: 2nd class>, <Classes: Testing: 2nd class>],[<Classes: 3rd: Class>, <Classes: 3rd: Class>]]