Как я могу сохранить django Model Form в представлениях для вошедшего пользователя

Я работаю над проектом на Django, где у меня есть Education(models.Model) с OneToOneField к User Model, как показано ниже:

class Education(models.Model):
applicant = models.OneToOneField(User, on_delete=models.CASCADE, null = True)
qualification = models.CharField(max_length=60, choices=INSTITUTE, blank=True, null=True)
institution = models.CharField(max_length=40, null=True)
reasons = models.CharField(max_length=100, null=True) 
matnumber = models.CharField(max_length=255, null=True)

И forms.ModelForm, как показано ниже:

class AddEducationForm(forms.ModelForm):

class Meta:
    model = Education
    fields = ['qualification','instition', 'matnumber', 'reasons','refphone']

В моем файле views.py я хочу сохранить эту AddEducationForm для вошедшего пользователя. Ниже приведено то, что я пробовал, но она не сохраняется, а показывает сообщение об успехе сохранения.

def AddEducation(request):
if request.method == 'POST':
    form = AddEducationForm(request.POST, instance=request.user)
    if form.is_valid():
        form.save()
        messages.success(request, 'Education Added Successfully')
        return redirect('user-bank')
else:
    form = AddEducationForm()
context = {
    'form':form,
}
           
return render(request, 'user/add_education.html', context)

Система выводит сообщение об успехе, что форма была сохранена для вошедшего пользователя, но на самом деле это не так (при проверке с помощью Django Admin Login). Кто-нибудь должен любезно помочь с решением этой проблемы. Помните, что каждый вошедший пользователь сохраняет только одну запись формы образования. Заранее благодарю.

Вы добавляете его к экземпляру формы, так:

from django.contrib.auth.decorators import login_required

@login_required
def add_education(request):
    if request.method == 'POST':
        form = AddEducationForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.applicant = request.user
            form.save()
            messages.success(request, 'Education Added Successfully')
            return redirect('user-bank')
    else:
        form = AddEducationForm()
    context = {
        'form':form,
    }
    return render(request, 'user/add_education.html', context)

Note: You can limit views to a view to authenticated users with the @login_required decorator [Django-doc].


Примечание: Функции обычно пишутся в snake_case, а не PascalCase, поэтому следует рекомендуется переименовать вашу функцию в add_education, а не addEducation.


Note: It is normally better to make use of the settings.AUTH_USER_MODEL [Django-doc] to refer to the user model, than to use the User model [Django-doc] directly. For more information you can see the referencing the User model section of the documentation.

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