Django Ошибка sub-select возвращает 3 столбца - ожидалось 1

Моя проблема состоит из двух частей

Что я пытаюсь сделать Я пытаюсь создать форму редактирования профиля для профиля учителя

  1. I'm trying to assign query_sets to the request.POST dictionary and I'm getting this error when I try to filter

  2. I noticed that the output of request.POST['course_teaching'] is always the last item in the list instead of all the items in it e.g if request.POST['course_teaching'] = ['1','6'] it gives only 6

Модель

class ClassLevel(models.Model):

    readonly_fields = ('id',)
    level = models.CharField(max_length=100)

    def __str__(self):
        return str("{} - {}" .format(self.id, self.level))



# School profile
class SchoolProfile(models.Model):
    school = models.OneToOneField(School, default=1, on_delete=models.CASCADE)
    classLevel = models.ManyToManyField(ClassLevel)

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



# Course is list of courses
class Course(models.Model):

    course_name = models.CharField(max_length=100)
    class_level = models.ForeignKey(ClassLevel, on_delete=CASCADE)

    def __str__(self):
        name_level = "{}, {}" .format(self.course_name, self.class_level)
        return name_level

# Teacher Profile
class Teacher(models.Model):
    readonly_fields = ('id', 'course_taught')
    user = models.OneToOneField(User, default=1, on_delete=models.CASCADE)
    class_teaching = models.ForeignKey(ClassLevel, null=True, on_delete=models.CASCADE)
    course_teaching = models.ForeignKey(Course, null=True, on_delete=models.CASCADE)
    school = models.OneToOneField(School, null=True, max_length=200, on_delete=models.CASCADE)
    status = models.BooleanField(default=True)

Форма

class profileForm(forms.ModelForm):

    school = forms.ModelChoiceField(queryset=models.SchoolProfile.objects.all())
    class_teaching = forms.ModelMultipleChoiceField(queryset=models.ClassLevel.objects.all())
    course_teaching = forms.ModelMultipleChoiceField(queryset=models.Course.objects.all())


    class Meta:
        model = Teacher
        fields = ['school', 'class_teaching', 'course_teaching',]
        labels = {'class_teaching':'class_teaching', 'course_teaching':'course_teaching', 'school':'school',}

Вид


def profile_edit(request):
    form = forms.profileForm(request.POST or None)
    template = 'blog/profile_edit.html'

    context = {
        'form' : form,
    }

    print(request.POST)
    # the Output
     <QueryDict: {'csrf...': ['...'], 'school': ['1'], 'class_teaching': ['1'], 
        'course_teaching': ['1', '6'], 'save': ['Submit Query']}>

    if request.POST:
        request.POST._mutable = True
        temp_School = request.POST['school'] 
        temp_Class = request.POST['class_teaching']
        temp_Course = request.POST['course_teaching']

        request.POST['class_teaching'] = []
        request.POST['course_teaching'] = []

        print(request.POST['course_teaching'])
        # Output: 6  --- wrong
        print("temp_course : ", temp_Course)
        # Output: 6

        request.POST['school'] = SchoolProfile.objects.get(id=temp_School)
        for i in temp_Class:
            request.POST['class_teaching'].append(ClassLevel.objects.filter(id=i))
        for i in temp_Course:
            request.POST['course_teaching'] = Course.objects.filter(id=i)
        
        print("\n\n\n 2 - ", request.POST)
        # the output
        <QueryDict: {'csrf...': ['...'], 'school': [<SchoolProfile: #1 - First School >], 
            'class_teaching': [[<QuerySet [<ClassLevel: 1 - Nursery>]>]], 
            'course_teaching': [<QuerySet [<Course: Computer Science, 6 - UNIVERSITY>]>],
            'save': ['Submit Query']}>

он доходит до этой точки и выдает ошибку. Я пытался использовать form.save, но это привело к тому, что я переполнил request.POST вручную, потому что "Teacher.class_teaching" должен быть экземпляром "ClassLevel""

Вернуться на верх