2017-03-01 10 views
0

Wenn ich mein Formular/Formset bearbeite und ein ContestForm entferne, ändert es sich meistens nicht und ich sehe Fehler "dieses Feld ist erforderlich" e. G. dort „Form XYZ“ war, habe ich es auf „----“ (leer) und nach der Einreichung es zeigt „dieses Feld erforderlich ist“, wie Sie im Screenshot This field is required Views.py sehen:Django-Formular (Set) - dieses Feld ist erforderlich

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: Vorlage:

<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

Sie sollten in models.py in jedem Feld leer = True, fügen Sie, dass Sie die Möglichkeit lassen, wollen leer sein – Lemayzeur

+0

I dont‘denken, dass es eine Lösung ist - wenn ich Contest in ContestForm leer lassen, ich erwarte, Der ContestForm-Eintrag wird gelöscht. – WhoKnows

Antwort

1

Haben Sie versucht, blank = 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) 
Verwandte Themen