Переопределите Django inlineformset_factory has_changed (), чтобы всегда возвращать True - PullRequest
2 голосов
/ 13 мая 2010

Я использую функцию django inlineformset_factory.

a = get_object_or_404(ModelA, pk=id)

FormSet = inlineformset_factory(ModelA, ModelB)
if request.method == 'POST':
    metaform = FormSet (instance=a, data=request.POST)

    if metaform.is_valid():
        f = metaform.save(commit=False)

        for instance in f:
           instance.updated_by = request.user
           instance.save()
else:
    metaform = FormSet(instance=a)

return render_to_response('nodes/form.html', {'form':metaform})

Происходит следующее: если я изменяю какие-либо данные, все работает нормально, и все данные обновляются. Однако, если я не изменяю какие-либо данные, данные не обновляются. т.е. только те записи, которые были изменены, проходят через цикл for для сохранения. Думаю, это имеет смысл, поскольку нет смысла сохранять данные, если они не изменились. Однако мне нужно пройти и сохранить каждый объект в форме независимо от того, есть ли у него какие-либо изменения.

Итак, мой вопрос: как мне переопределить это, чтобы он проходил и сохранял каждую запись, есть ли в ней какие-либо изменения или нет?

Надеюсь, это имеет смысл

Спасибо

Ответы [ 2 ]

3 голосов
/ 13 мая 2010

inlineformset_factory, я думаю, может принимать форму объекта. Я считаю, что вы могли бы сделать, это создать формы. ModelForm, а затем добавить поле, как always_update = forms.IntegerField(required=False) а затем в функции __init__ сделайте что-то вроде self.fields['always_update'].initial = int(time.time()). Я верю, что это заставит его обновиться, но вам придется проверить это.

0 голосов
/ 13 мая 2010

Если поле updated_by всегда будет одинаковым для каждого экземпляра ModelB, связанного с конкретным экземпляром ModelA, разве вы не должны хранить его один раз на родительском, а не на каждом дочернем?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...