2017-03-01 13 views
0

フォーム/フォームセットを編集してContestFormを1つ削除すると、ほとんどの場合変更が行われず、 "このフィールドは必須です"というメッセージが表示されます e。 g。 「フォームXYZ」があった、私はそれが変更され、「----」(空白)と、それはあなたが This field is required 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> 
+0

あなたは真=空白に追加する必要があり、あなたはpossiblityは – Lemayzeur

+0

空に聞かせたいmodels.pyの各フィールドに私はいけない、それが解決策だと思う - 私は空白のContestFormでコンテストを去るとき、私は期待そのContestFormエントリは削除されます。 – WhoKnows

答えて

1

空白= Trueを追加しようとしましたか?

class Contest(models.Model): 
    name = models.CharField('Contest Name', max_length=100,blank=True) 

class ContestForms(models.Model): 
    contest = models.ForeignKey(Contest, on_delete=models.CASCADE,blank=True,null=True) 
関連する問題