0
フォーム/フォームセットを編集してContestFormを1つ削除すると、ほとんどの場合変更が行われず、 "このフィールドは必須です"というメッセージが表示されます e。 g。 「フォームXYZ」があった、私はそれが変更され、「----」(空白)と、それはあなたが Views.pyスクリーンショットで見ることができるように「このフィールドが必要です」と表示さ提出後:Djangoフォーム(設定) - このフィールドは必須です
def contest_admin(request, contest_slug):
contest = get_object_or_404(Contest, slug=contest_slug)
ontestFormsFormSet = inlineformset_factory(Contest,
ContestForms,
fields=('form', 'main_entry', 'user_modifiable',),
extra=2,
)
contest_desc = ContestDescForm(request.POST or None, instance=contest)
contest_forms = ContestFormsFormSet(request.POST or None, instance=contest)
if request.method == 'POST':
if contest_desc.is_valid() and contest_forms.is_valid():
contest_desc.save()
contest_forms.save()
context = {
...
}
template_name = "contests/admin/_admin.html"
return render(request, template_name, context)
Models.py:
class Contest(models.Model):
name = models.CharField('Contest Name', max_length=100)
slug = models.SlugField(unique=True)
capacity = models.IntegerField('Capacity')
team_size = models.IntegerField('Team size', default=1)
description = models.CharField('Description', max_length=1000)
date_opened = models.DateField('Date opened')
date_registration_closed = models.DateField('Date registration closed')
date_closed = models.DateField('Date closed')
forms = models.ManyToManyField(FormEntry, through='ContestForms')
class ContestForms(models.Model):
contest = models.ForeignKey(Contest, on_delete=models.CASCADE)
form = models.OneToOneField(FormEntry)
main_entry = models.BooleanField('Main entry')
user_modifiable = models.BooleanField('Modifiable')
class Meta:
verbose_name_plural = "ContestForms"
Forms.py:
class ContestDescForm(forms.ModelForm):
widget_attrs = {
'class': "form-control",
'type': 'date',
}
description = CharField(widget=forms.Textarea)
date_opened = DateField(widget=DateInput(attrs={'type': 'date'}))
date_registration_closed = DateField(widget=DateInput(attrs={'type': 'date'}))
date_closed = DateField(widget=DateInput(attrs={'type': 'date'}))
class Meta:
model = Contest
exclude = ('slug', 'forms',)
class ContestFormsForm(forms.ModelForm):
form = ModelChoiceField(required=False, queryset=FormEntry.objects.all())
class Meta:
model = ContestForms
exclude =()
EDIT: テンプレート:
<form method="post" action="">
{% csrf_token %}
{{ contest_desc|bootstrap }}
<table>
{{ contest_forms|bootstrap_inline }}
</table>
<div class="form-group">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
あなたは真=空白に追加する必要があり、あなたはpossiblityは – Lemayzeur
空に聞かせたいmodels.pyの各フィールドに私はいけない、それが解決策だと思う - 私は空白のContestFormでコンテストを去るとき、私は期待そのContestFormエントリは削除されます。 – WhoKnows