Как я могу сохранить 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_requireddecorator [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 theUsermodel [Django-doc] directly. For more information you can see the referencing theUsermodel section of the documentation.