Как заполнить модель неформализованными данными?

У меня есть модели Student, Class и StudentClass. Я хочу, чтобы студент мог присоединиться к новому классу, введя код_класса в форму. Чтобы присоединиться к классу, идентификатор студента пользователя и код_класса сохраняются в модели StudentClass. Student_id не является полем формы, поэтому он должен быть получен путем запроса модели Student с именем пользователя и возвращением student_id.

models.py:

class StudentClass(models.Model):
    class Meta:
        unique_together = (('class_code', 'student_id'),)
    class_code = models.ForeignKey(Class, on_delete=models.CASCADE)
    student_id = models.ForeignKey(Student, on_delete=models.CASCADE)

forms.py:

class JoinClassForm(forms.ModelForm):
    class Meta:
        model = StudentClass
        fields = ['class_code']

views.py

@login_required
def join_class(request):
    if request.method == "POST":
        joinclass_form = JoinClassForm(request.POST or None)
        if joinclass_form.is_valid():
            formclass_code = joinclass_form.data.get('class_code')
            if Class.objects.filter(class_code=formclass_code).exists():
                joinclass_form.save(commit=False)
                joinclass_form.student_id =
                Student.objects.filter(username=request.user.username).values_list('student_id', flat=True)
                joinclass_form.save()
                return redirect('assignments')
            else:
                messages.success(request, ("This class doesn't exist!"))
    else:
        joinclass_form = JoinClassForm
    return render(request, 'join_class.html', {'joinclass_form': joinclass_form})

Я пробовал использовать hidden_field для student_id, исключить student_id из полей формы и сохранить как commit=False, и получил ту же ошибку: IntegrityError Not NULL constraint failed. Есть ли ошибка в моем коде, которую я пропустил, или я использую неправильный метод? Заранее спасибо

Edit: Простите меня, но копирование-вставка в последнем наборе кода пошла не так, и я понятия не имею, как это исправить

Вам не нужно помещать .username в request.user. Вы можете просто сказать request.user

Спасибо всем за помощь, но теперь мне удалось это исправить

На случай, если кому-то это понадобится в будущем, я понял, что допустил 2 ошибки:

  1. Я неправильно сохранял свою форму в своем views.py, я пытался сохранить значение student_id в форме, а не в объекте.

https://docs.djangoproject.com/en/4.1/topics/forms/modelforms/#the-save-method

  1. Я назвал свой внешний ключ в таблице StudentClass как student_id, что означало, что Django переименовывал его в student_id_id. Чтобы исправить это, я просто удалил _id из student_id в таблице StudentClass.
Вернуться на верх