简体   繁体   English

字段“id”需要一个数字,但得到了<QuerySet [<Department: GEE> ]&gt;

[英]Field 'id' expected a number but got <QuerySet [<Department: GEE>]>

I can't find the mistake here.我在这里找不到错误。 I saw some similar questions but still can't fix it.我看到了一些类似的问题,但仍然无法解决。

here is my models.py这是我的models.py

class Department(models.Model):
    name = models.CharField(max_length=100)

class CustomUser(AbstractUser):
    department = models.ManyToManyField(Department, blank=True)

class Student(models.Model):
    user = models.OneToOneField(CustomUser, on_delete=models.CASCADE, primary_key=True)
    department = models.ManyToManyField(Department, blank=True)

forms.py表格.py

class StudentRegisterForm(UserCreationForm):
    class Meta(UserCreationForm):
        model = CustomUser
        fields = ['department', ..]
        widgets = {'department': forms.CheckboxSelectMultiple()}

    def __init__(self, *args, **kwargs):
        super(StudentRegisterForm, self).__init__(*args, **kwargs)
        self.fields['department'].required = True

    def clean_department(self):
        value = self.cleaned_data.get('department')
        if len(value) > 1:
            raise forms.ValidationError("You can't select more than one department!")
        return value

    def save(self, commit=True):
        user = super().save(commit=False)
        user.save()
        student = Student.objects.create(user=user)
        student.department.add(self.cleaned_data.get('department')) <-- got error on this line
        return (user, student)

When the CustomUser object is created, the Student object will also be created within save method.当创建CustomUser对象时,也会在save方法中创建Student对象。 But for some reasons it gave me an error但由于某些原因,它给了我一个错误

TypeError: Field 'id' expected a number but got <QuerySet [<Department: GEE>]>.

Noticed that the Department objects were created within admin panel and also the department field within the Student model works just fine if I create it inside admin panel.注意到 Department 对象是在管理面板中创建的,如果我在管理面板中创建它, Student模型中的部门字段也能正常工作。

我通过将 * 添加到add方法中来修复它

student.department.add(*self.cleaned_data.get('department'))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM