MultipleChoiceFieldを私のフォームに使用します。選択した値をすべてデータベースに追加しますが、使用する次のコードは最後に選択した値だけを追加します。私は私のビューで複数の番号オブジェクトを作成しようとしました。私は間違っていた?MultipleChoiceField複数のオブジェクトを作成
models.py:
class Requirement(models.Model):
code = models.UUIDField(_('Code'), primary_key=True, default=uuid.uuid4, editable=False)
symbol = models.CharField(_('Symbol'), max_length=250)
name = models.CharField(_('Name'), max_length=250)
forms.py:
class AddForm(forms.ModelForm):
symbol= forms.MultipleChoiceField(required=False, widget=forms.CheckboxSelectMultiple, choices=REQUIREMENTS_CHOICES,)
class Meta:
model = Requirement
fields = ('symbol',)
REQUIREMENTS_CHOICES = (
('A', 'Name A'),
('B', 'Name B'),
('C', 'Name C'),
)
views.py:
def requirement_add(request):
data = dict()
if request.method == 'POST':
form = AddForm(request.POST)
if form.is_valid():
list = dict(REQUIREMENTS_CHOICES) # {'C': 'Name C', 'A': 'Name A', 'B': 'Name B'}
symbols = form.cleaned_data.get('symbol') # ['A', 'B', 'C']
requirement = form.save(commit=False)
for symbol in symbols:
requirement.symbol = symbol
requirement.name = list[symbol]
requirement.save()
data['form_is_valid'] = True
requirements = Requirement.objects.filter()
context = {requirement': requirement, 'requirements': requirements}
data['html_requirement'] = render_to_string('project/requirement_list.html', context)
else:
data['form_is_valid'] = False
else:
form = AddForm()
context = {'form': form}
data['html_requirement_form'] = render_to_string('project/requirement_add.html', context, request=request)
return JsonResponse(data)
をありがとう:あなたはこのようなループのために
requirement = form.save(commit=False)
を置けば、あなたはこのすべてを避けることができます! 'requirement.pk = None'は私のために働いていますが、なぜそれが動作するのかわかりませんxD少し説明できますか?あなたはコードフィールドが私のpkであることがわかるので、default = uuid.uuid4も使用します。だから私はそれが自動的にpkを作成すると思った。また、リンクに感謝します。 –よろしくお願いいたします。私は説明と別の解決策を追加しました。 –