ModelFormを使用すると、私は窮地に陥りました。ModelFormと関連するオブジェクトの問題
私はDjangoに付属するextending the User modelです。また、ユーザーが編集できるようにModelFormも使用しています。
ドキュメントの同じ例に従って、私はこのコードを持っています。
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)
forms.py
class DepartmentForm(ModelForm):
class Meta:
model = Employee
fields = ['department',]
問題が一目できます。私はモデルのインスタンスをフォームに渡す必要があるので、save()関数はカスタマイズする必要はなく、user.employeeはまだ作成されていないので、エラーが発生します。
views.pyは
私は手動でシェルを介してuser.employee.departmentする値を追加してからページをリロードした場合、それが動作def 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})
、それ以外の場合はエラーは以下の通りです。
RelatedObjectDoesNotExist at [something]
User has no employee.
またはそのような何か...ごめんなさい、私はエラーが少し違うかもしれないが、概念はまったく同じである上記のコードをしようとしませんでした。
これまでにお聞きしたことがありましたら申し訳ありません。私はGoogleの検索を行い、この問題の答えを見つけることができませんでした。
通常、 'CharField'に' null = True'を設定する必要はありません。単純に 'blank = True'を指定した場合、フィールドはオプションで、値が与えられていない場合は空の文字列' '' 'を保存します。 – Alasdair