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 по умолчанию), но возможно есть другое решение для решения этой проблемы. Если что-то не понятно, я объясню более конкретно

Вернуться на верх