マルチテーブル モデルの継承を使用するモデルに関連するフォームセットがあります。フォームを送信すると、次のエラーが表示されます。
MultiValueDictKeyError
"Key 'form-0-mediaitem_ptr' not found in <QueryDict: {u'form-0-caption':
[u'asfdasda'], u'form-MAX_NUM_FORMS': [u''], u'form-TOTAL_FORMS': [u'1'], u'form-
INITIAL_FORMS': [u'1'], u'img_info_submitted': [u'save to library'],
u'csrfmiddlewaretoken': .......
関係するモデルは次のとおりです。
class MediaItem(models.Model):
'''
Parent class for all media items (ImageItem, VideoItem,
AudioItem, and TextItem).
'''
user = models.ForeignKey(User)
upload_date = models.DateTimeField(auto_now_add = True)
last_modified = models.DateTimeField(auto_now = True)
class ImageItem(MediaItem):
original_img = models.ImageField(upload_to = img_get_file_path)
large_img = models.ImageField(upload_to = img_get_file_path)
thumbnail_img = models.OneToOneField(ItemThumbnail)
caption = models.CharField(max_length = 1000,
blank = True)
フォームセットに使用されるフォームは次のとおりです。
class ImageInfoForm(forms.ModelForm):
class Meta:
model = ImageItem
def __init__(self, *args, **kwargs):
super(ImageInfoForm, self).__init__(*args, **kwargs)
self.fields['caption'].widget = forms.Textarea(attrs = {'placeholder': 'caption'})
caption = forms.CharField(widget = forms.Textarea(attrs = {'placeholder': 'caption'}),
max_length = 1000,
required = True)
次のように、ビューでフォームセットを構築しようとしました。
ImageInfoFormset = modelformset_factory(ImageItem,
form = ImageInfoForm,
fields=['caption',
'mediaitem_ptr'],
extra = 0)
そして、私はこのようにも試しました:
ImageInfoFormset = modelformset_factory(ImageItem,
form = ImageInfoForm,
extra = 0)
{{form}}
テンプレートでは、タグ 全体を{% for form in formset %}
ループで使用するようにしています。
彼自身の質問に対するエリックの答えを見て、 How to debug a Django MultiValueDictKeyError on Formset POSTを見て、運が悪かったので次のように変更しImageForm
ました:-(
class ImageInfoForm(forms.ModelForm):
class Meta:
model = ImageItem
fields = (
'mediaitem_ptr',
'caption')
def __init__(self, *args, **kwargs):
super(ImageInfoForm, self).__init__(*args, **kwargs)
self.fields['caption'].widget = forms.Textarea(attrs = {'placeholder': 'caption'})
caption = forms.CharField(widget = forms.Textarea(attrs = {'placeholder': 'caption'}),
max_length = 1000,
required = True)
これを修正する方法を知っている人はいますか?正しいインスタンスを更新するには、親モデルへのポインターがフォームに含まれている必要があることは理解していますが、どうすればそれを達成できますか? ありがとう!