考えられる答えは少なくとも 2 つあります。
A. 2 つのフォームを使用して、同じビューに投稿します。Data
最初にオブジェクトを永続化し、次にデータベースにコミットせずにオブジェクトを作成し、Photo
データ属性をインスタンスに割り当ててから、インスタンスdata
を呼び出します (以下に例を示します)。.save()
photo
B. インライン モデル フォームセットを使用する: https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#inline-formsets
[編集]
class Data(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField()
class Photo(models.Model):
photo = models.ImageField(upload_to='img')
data = models.ForeignKey(Data)
class DataForm(forms.ModelForm):
class Meta:
model = Data
class PhotoForm(forms.ModelForm):
class Meta:
model = Photo
exclude = ('data',)
def your_view(request):
data_form = DataForm(request.POST or None)
photo_form = PhotoForm(request.POST or None, request.FILES or None)
if request.method == 'POST':
if data_form.is_valid() and photo_form.is_valid():
data = data_form.save()
photo = photo_form.save(commit=False)
photo.data = data
photo.save()
# do something else here, like a redirect to another view.
return render(request, 'your-template.html',
{'data_form': data_form, 'photo_form': photo_form})
multipart/form-data
フォームがenctype として: を使用していること、またはrequest.FILES
空であることを確認してください。