ModelForm kullanırken bir çıkmaza girdim.ModelForm ve ilgili nesnelerle ilgili sorun
Ben Django ile birlikte gelen extending the User model yaşıyorum ve aynı zamanda bir ModelForm kullanıyorum, böylece kullanıcı bunu düzenleyebilir.
Aynı örnekte, bu belgede, bu koda sahip olurdum.
class DepartmentForm(ModelForm):
class Meta:
model = Employee
fields = ['department',]
sorun forms.py models.py
class Employee(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
# In this case, department is optional, so I have set 'blank' and 'null' to True.
department = models.CharField(max_length=100, blank=True, null=True)
görünümü geliyor. Modelin bir örneğini forma kaydetmem gerektiğine karar verdim, böylece save() işlevi onu özelleştirmek zorunda kalmadan çalışır, ancak elbette user.employee henüz oluşturulmadı, dolayısıyla bir hata attı.
views.py
el kabuk aracılığıyla user.employee.department için bir değer ekleyin ve sonra sayfayı yeniden eğer çalışırdef DepartmentView(request):
# Here is the issue.
department = request.user.employee
if request.method == 'POST':
# I need to pass the instance here.
form = DepartmentForm(request.POST, instance=department)
if form.is_valid():
form.save()
else:
# And also here so it autocompletes the form.
form = DepartmentForm(instance=department)
return render(request, 'employee.html', {'form': form})
, aksi hata aşağıdaki gibidir. Hata biraz farklı olabilir bu yüzden böyle
RelatedObjectDoesNotExist at [something]
User has no employee.
Ya da bir şey ... Üzgünüm, ben yukarıdaki kodu deneyin vermedi, ama kavram tamamen aynıdır.
Bu daha önce sorulmuşsa özür dilerim. Bir Google araması yaptım ve bu sorunun cevabını bulamadım.
"CharField" için genellikle "null = True" değerine sahip olmanın gerekli olmadığını unutmayın. Eğer basitçe 'blank = True' varsa, alan isteğe bağlıdır ve değer verilmediğinde boş dizge '' '' kaydedecektir. – Alasdair