Django Ошибка sub-select возвращает 3 столбца - ожидалось 1
Моя проблема состоит из двух частей
Что я пытаюсь сделать Я пытаюсь создать форму редактирования профиля для профиля учителя
I'm trying to assign query_sets to the request.POST dictionary and I'm getting this error when I try to filter
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""