Почему вы думаете, что присвоение случайного атрибута объекту формы сделает его действительным? Нет никакой точки, в которой форма использует свои атрибуты экземпляра для проверки ее валидности, и ничто в документации не подразумевает, что это так.
Есть несколько способов исправить это правильно. Во-первых, и, вероятно, самое уродливое, это скопировать 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()