Возможно ли сделать inlineformset_factory модель ModelForm, а также модель. Когда я пытаюсь запустить это, я получаю сообщение об ошибке «Объект NoneType» не является итерируемым.inlineformset_factory, состоящий из ModelForm
Пожалуйста, помогите, я провел целый день, пытаясь понять это. Благодарю.
Код:
Model.py
class FilterForm(ModelForm):
firstFilter = forms.BooleanField(label='First Filter', initial=False, required=False)
class Meta:
model = Filter
exclude = ('order')
class Controller(models.Model):
protocol = models.CharField('Protocol',max_length=64, choices=PROTOCOLS, default='http')
server = models.CharField('Server', max_length=64, choices=SERVERS, default='127.0.0.1')
name = models.CharField('Name', max_length=64)
def __unicode__(self):
return self.protocol + '://' + self.server + '/' + self.name
view.py
def controller_details(request, object_id):
controller = Controller.objects.get(pk=object_id)
controllerURI = controller.protocol + '://' + controller.server + '/' + controller.name
FilterFormSet = inlineformset_factory(Controller, FilterForm, extra=5)
if request.method == 'POST':
formset = FilterFormSet(request.POST, request.FILES, instance=controller)
if formset.is_valid():
filters = []
# Save all the filters into a list
forms = formset.cleaned_data
for form in forms:
if form:
protocol = form['protocol']
server = form['server']
name = form['name']
targetURI = form['targetURI']
filterType = form['filterType']
firstFilter = form['firstFilter']
if firstFilter == True:
aFilter = Filter(controller=controller, protocol=protocol, server=server, name=name, targetURI=targetURI, filterType=filterType, order=0)
else:
aFilter = Filter(controller=controller, protocol=protocol, server=server, name=name, targetURI=targetURI, filterType=filterType, order=-1)
filters.append(aFilter)
# Find the first filter in the list of filters
for index, aFilter in enumerate(filters):
if aFilter.order == 0:
break
if filters[index].targetURI:
test = "yes"
else:
for aFilter in filters:
aFilter.save()
else:
formset = FilterFormSet(instance=controller)
return render_to_response('controller_details.html', {'formset':formset, 'controllerURI':controllerURI}, context_instance=RequestContext(request))
Tks для вашего ответа. Я изменил свой код на FilterFormSet = inlineformset_factory (Controller, form = FilterForm, extra = 5), но теперь я получаю эту ошибку: inlineformset_factory() принимает не менее 2 аргументов без ключевого слова (1 задано) – Przemek
Привет, см. Мое обновление к ответу. – ars
На самом деле есть отношение внешних ключей. Контроллер содержит один или более Filters.class фильтра (компонент): \t контроллера \t = models.ForeignKey (контроллер) \t \t targetURI = models.ForeignKey ('я', verbose_name = 'Целевого URI', NULL = True, пустые = True) \t \t FilterType = models.CharField ('Type', max_length = 64, выбор = FILTER_TYPES, пусто = False, по умолчанию = 'avgFilter') \t \t \t порядок = models.IntegerField ('Order') – Przemek