Почему этот django ModelForm не действителен? - PullRequest
0 голосов
/ 24 февраля 2012

У меня есть две модели:

ProcessDao
  ** normal fields **
  resource = models.ForeignKey(ResourceData, related_name='processes')

ResourceData
  ** Normal Fields **

Код ниже находится в моем views.py:

pdForm = ProcessDataForm(request.POST)
rd = ResourceData.objects.get(pick_date__exact = request.POST['pick_date'])
pdForm.resource = rd    <------ here is the assignment
if pdForm.is_valid():
  pdForm.save()
else:
  print 'pdForm is not valid ! ', pdForm.errors
  # print "resource is not valid."

Есть ли способ сделать pdForm действительным?

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

Почему вы думаете, что присвоение случайного атрибута объекту формы сделает его действительным? Нет никакой точки, в которой форма использует свои атрибуты экземпляра для проверки ее валидности, и ничто в документации не подразумевает, что это так.

Есть несколько способов исправить это правильно. Во-первых, и, вероятно, самое уродливое, это скопировать request.POST и вставить туда идентификатор соответствующего объекта. (Вам необходимо скопировать его, так как исходный экземпляр является неизменяемым).

Гораздо лучший способ - полностью исключить поле из формы (через класс Meta формы) и в предложении is_valid сделать это:

object = pdForm.save(commit=False)
rd = ResourceData.objects.get(pick_date__exact = pdForm.cleaned_data['pick_date'])
object.resource = rd  
object.save()
1 голос
/ 24 февраля 2012

Разве вы не должны работать над очищенной формой для назначения пустых полей?Попробуйте что-то вроде:

if pdForm.is_valid():
    cleanform = pdForm.save(commit = False).
    cleanform.resource = rd
    cleanform.save()

Я просто не уверен, будет ли это работать с ресурсом, являющимся единственным полем в модели.Я Django Noob, но он работает для меня с назначением полей ForeignKey во многих формах.

...