首页 > 解决方案 > 如何在表单中使用预填充的 ChoiceField 创建实例

问题描述

这是我的forms.py。我想在我的模型中创建具有默认“V”选项的实例。因此创建了实例,但选择了“A”,这是我在模型中默认提供的。

class VideoForm(forms.ModelForm):
    theory_type = forms.ChoiceField(choices=quests.StageTheories.THEORY_TYPE)

    class Meta:
       model = quests.StageTheories
       fields = ['title', 'youtube', 'stage']

class StageTheories(models.Model):
    THEORY_TYPE = (
        ('Q', 'Quiz'),
        ('A', 'Article'),
        ('V', 'Video'),
    )

    stage = models.ForeignKey(to=Stages, on_delete=models.CASCADE, db_column="stage_id",verbose_name="Этап", )
    title = models.CharField(max_length=47, db_column="title", verbose_name="Заголовок теории",)
    text = models.TextField(db_column="text", verbose_name="Текст теории", null=True, blank=True,)
    youtube = models.URLField(db_column="youtube", verbose_name="Ссылка на youtube", null=True, blank=True,)
    sortOrder = models.PositiveIntegerField(null=True, blank=True, db_column="sort_order", verbose_name="Порядковый номер", )
    theory_type = models.CharField(max_length=1, choices=THEORY_TYPE, default='A')

class AddVideoView(CreateView):
    model = quests.StageTheories
    form_class = VideoForm
    success_url = '/'
    template_name = 'add_video.pug'

    def get_initial(self):
        initial = super().get_initial()
        initial['stage'] = quests.Stages.objects.get(id=self.kwargs['pk'])
        initial['theory_type'] = 'V'
        return initial

初始值不用于表单数据吗?

标签: djangogenericsdjango-formsdjango-generic-views

解决方案


它是从哪里继承来的?get_initial

我认为您可以尝试使用 def init (...): initial[] = 或 self.fields['name'].initial


推荐阅读