Formset Создание новых записей вместо обновления - PullRequest
2 голосов
/ 27 июля 2010

У меня есть следующий код в представлении:

def controller_details(request, object_id):
    controller = Controller.objects.get(pk=object_id)
    controllerURI = controller.protocol + '://' + controller.server + '/' + controller.name

    FilterFormSet = inlineformset_factory(Controller, Filter, extra=2)

    if request.method == 'POST':
        formset  = FilterFormSet(request.POST, request.FILES, instance=controller)
        if formset.is_valid():
            formset.save()
        else:
            HttpResponseRedirect('controller-details')
    else:
        formset = FilterFormSet(instance=controller)

    return render_to_response('controller_details.html', {'formset':formset, 'controllerURI':controllerURI}, context_instance=RequestContext(request))

В моей модели один контроллер состоит из нескольких фильтров (от одного до нескольких), и каждый фильтр может иметь другой фильтр в качестве цели для своеговыходной (один ко многим на себя).Когда я пытаюсь обновить цель для определенного фильтра, вместо обновления значения цели я получаю новую запись целиком.Вот как выглядит часть модели:

class Filter(Component):
controller  = models.ForeignKey(Controller)
targetURI   = models.ForeignKey('self', verbose_name='Target URI', null=True, blank=True)
filterType  = models.CharField('Type', max_length=64, choices=FILTER_TYPES,)
firstFilter = models.BooleanField('First Filter')

Заранее спасибо.

1 Ответ

1 голос
/ 09 августа 2010

Наконец-то разобрался.Приведенное ниже решение для тех, у кого может быть похожая проблема:

controller = Controller.objects.get(pk=object_id)
controllerURI = controller.protocol + '://' + controller.server + '/' + controller.name
FilterFormSet = inlineformset_factory(Controller, Filter, extra=5)

if request.method == 'POST':
    formset  = FilterFormSet(request.POST, request.FILES, instance=controller)

    if formset.is_valid():
        instances = formset.save(commit=False)

        for instance in instances:
            instance.save()

formset = FilterFormSet(instance=controller)

return render_to_response('controller_details.html', {'formset':formset, 'controllerURI':controllerURI}, context_instance=RequestContext(request))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...