Django формирует ValueError с помощью виджета HiddenInput
У меня странная проблема. У меня есть моя модель GameTask
с полями типа:
activity = models.ForeignKey(Activity,
verbose_name='Activity',
related_name='activities',
null=True,
blank=True,
on_delete=models.SET_NULL)
distance = models.IntegerField(verbose_name='Distance [m]', default=0)
Я хочу создать форму для этой модели и отображать поле активности и расстояние только в определенной категории (поле в GameTask), например:
form.fields['activity'] = forms.CharField(widget=forms.HiddenInput(), required=False)
form.fields['distance'] = forms.CharField(widget=forms.HiddenInput(), required=False)
if category_slug == settings.GAME_TASK_SPORT_CATEGORY_NAME:
form.fields['activity'] = forms.ModelChoiceField(
required=False,
queryset=Activity.objects.all(),
widget=forms.Select(
attrs={'placeholder': 'Aktywności', 'class': 'form-control'}
)
)
и это работает. Эти 2 поля отображаются только в определенной категории, но когда я хочу сохранить форму, я получаю ошибку: Cannot assign "''": "GameTask.activity" must be a "Activity" instance.
Кроме того, я определил структуру следующим образом:
MODEL_PARAMS_TASK = {
'model': GameTask,
'fields': ['name', 'teams', 'activity', 'distance', 'description', 'button_text', 'cycle_type', 'self_confirm',
'confirm_attachment', 'attachment_options', 'points', 'max_points', 'image', 'multi_task_image',
'priority', 'attrs', 'private_attrs'],
'template_name': 'master/task_form.html',
'success_url': 'master_task_item',
}
Я думал о рефакторинге и создании 2 форм (1 для конкретной категории и 1 по умолчанию), но возможно есть другое решение для решения этой проблемы. Если что-то не понятно, я объясню более конкретно