Django formset: невозможно сохранить - PullRequest
0 голосов
/ 24 января 2020

Пытался настроить простой набор форм, но получал ошибки 'SWDataForm' object has no attribute 'save'

МОДЕЛЬ

class SWData(ValidateOnSaveMixin, models.Model):
    model_serial = models.ForeignKey(SWInfo, related_name='serial_items', on_delete=models.SET_NULL, null=True)
    hostname = models.CharField(max_length=20, default='', unique=True)
    deployed = models.BooleanField()

class Meta:
    verbose_name_plural = "SWDATA"

def __str__(self):
    return "{0}".format(self.hostname)

ПРОСМОТР

def display_data(request, data, **kwargs):
    return render(request, 'web/posted-data.html', dict(data=data, **kwargs))

def swdata(request, *args, **kwargs):
   template = 'web/swdata.html'

   SWDataFormset = modelformset_factory(SWData, fields=('__all__'), extra=1)
   formset = SWDataFormset(request.POST or None)

   if request.method == 'POST':
      print(formset.is_valid())
      if formset.is_valid():
         pprint(formset)
         for form in formset.forms:
            if form.is_valid():
                try:
                    if form.cleaned_data.get('DELETE') and form.instance.pk:
                        form.instance.delete()
                    else:
                        instance = form.save(commit=False)
                        #instance.model_serial = model_serial
                        #print (instance.model_serial)
                        instance.save()
                        messages.success(request, "Successfully")
                except formset.DoesNotExist:
                    messages.error(request, "Database error. Please try again")

        #data = form.cleaned_data
        #return display_data(request, data)
    else:
        formset = SWDataFormset(request.POST or None)
return render(request, template, {'formset': formset})

Удалить форму и использовать модельformset_factory, я удалось сохранить только последнюю запись в наборе форм. Как l oop через каждый префикс набора форм и сохранить каждый элемент?

Ответы [ 2 ]

1 голос
/ 24 января 2020

Я думаю, что вы пытаетесь сохранить форму данных из формы, но вы не можете этого сделать. Вам нужно использовать метод создания вашей модели. Что-то вроде SWDData.objects.create (форма).

0 голосов
/ 03 марта 2020

удалить эту строку

instance = form.save(commit=False)

эта строка необходима, когда вы хотите редактировать форму. Теперь проверьте, работает ли

Даже у меня тоже получилось похоже Проблема

...