У меня проблема, когда мой ModelForm
пытается присвоить поле поле (это экономит штраф, если я действительно предоставляю первичный ключ Product
, но это не обязательное поле и не будет сохранено, если поле осталось пустым). Я считать, что ОРМ он пытается установить это поле в ''
но:ModelForm не будет проверять, поскольку отсутствует значение, но поле модели имеет значение null = True
- не
''
должны быть принуждены кNone
, и; - Почему модель не пытается установить это поле на
None
в первую очередь вместо''
?
models.py
class Question(models.model):
fk_product = models.ForeignKey(Product, on_delete=models.SET_NULL, null=True, related_name="product_question")
forms.py
class QuestionForm(forms.ModelForm):
fk_product=forms.ChoiceField(required=False)
class Meta:
model = Question
fields = ['fk_product',]
Ошибка:
Cannot assign "''": "Question.fk_product" must be a "Product" instance.
Код вид, который производит ошибку:
QuestionModelFormset = modelformset_factory(Question,
form=QuestionForm,
extra=1)
question_formset = QuestionModelFormset(
data=request.POST,
files=request.FILES,
queryset=Question.objects.all())
if not question_formset.is_valid(): #error occurs on this line
Вы не должны использовать 'ChoiceField' для внешнего ключа. Используйте «ModelChoiceField». Если вы установили 'blank = True' в модели, как предлагает @ 4140tm, то форма будет использовать' ModelChoiceField' с 'required = False', поэтому вы можете удалить строку' 'fk_product = forms.ChoiceField (required = False) 'из вашей формы. – Alasdair