0
Djangoのinlineformset_factoryを使用してフォームを設定しようとしています。モデルは多対1の関係で設定され、各ユーザーには多くのケースがあります。私は、ユーザーがケースを追加したい。Django:ユーザーと多対1の関係を持つinline_formsetを使用してフォームを作成する方法
models.py
class Case(models.Model):
date_due = models.DateField()
user = models.ForeignKey(User, on_delete=models.CASCADE)
forms.py
CaseFormset = inlineformset_factory(User,Case,
fields=('date_due',),
can_delete = True)
class CaseForm(forms.ModelForm):
class Meta:
model = Case
fields = ('date_due',)
views.py
@login_required
def add_case(request):
if request.method == 'POST':
form = CaseForm(request.POST)
if form.is_valid():
case = form.save(commit = False)
case_formset = CaseFormset(request.POST, instance = case)
if case_formset.is_valid():
case.save()
case_formset.save()
return redirect('index')
else:
print(form.errors)
else:
form = CaseForm()
case_formset = CaseFormset(instance = Case())
return render(request, 'cases/add_case.html',
{'form':form, 'case_formset':case_formset})
add_case.htmlからの一般的なアウトラインを踏襲しています
<!DOCTYPE html>
{% load staticfiles %}
<html>
<head>
<body>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
{{ case_formset.as_p }}
{{ case_formset.management_form }}
<button type="submit">Save changes</button>
</form>
</body>
</head>
</html>
私は私が行っているフォームセットにmanagement_formを追加する必要があるように見えるのドキュメントを読む
Exception Type: ValidationError
Exception Value:
['ManagementForm data is missing or has been tampered with']
を取得しています。どこに間違っているのか分からない。
Iはまた、上記とはわずかに異なる見え、インスタンスとしてユーザーを使用してフォームセットを作成しようとしたthe docs
異なるアプローチを試みました。どちらのアプローチが望ましいか分かりません。
私には2つの質問があります。
- なぜ私は上記のエラーが発生していますか?
- 大文字小文字の代わりにformsetをuserのインスタンスに設定する必要がありますか?
おかげ
よう
case.user = request.user
のでviews.pyルックスを追加する必要が?あなたはフォームだけではなく、管理フォームを出力しました。 –
@Roseman修正を加えましたが、エラーは継続します –