Django - 表单 - ForeignKey - 隐藏 - 默认值

Django - Form - ForeignKey - Hidden - Default value

我在更新表单中有一个隐藏的外键,我想在我的 html 表单中将其设置为默认值 2,但我无法让它工作。

forms.py

    eval_sent_state = forms.ModelChoiceField(widget=forms.HiddenInput(), initial=2,queryset=models.EvalUrlSentState.objects.all())

我得到的 Html 输出:

<input type="hidden" name="eval_sent_state" value="1" id="id_eval_sent_state">

来自 views.py

class ClassSchoolTeacherUpdateView(generic.UpdateView):
    model = models.ClassSchool
    form_class = forms.ClassSchoolTeacherForm
    pk_url_kwarg = "pk"

    def get_object(self, queryset=None):
        return models.ClassSchool.objects.get(class_random_key=self.kwargs.get("random"))

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['username'] = self.kwargs.get('username')
        context['random'] = self.kwargs.get('random')
        return context

来自 models.py:

class ClassSchool(models.Model):

    # Relationships
    eval_sent_state = models.ForeignKey("EvalUrlSentState", default=1,  on_delete=models.SET_NULL, blank=True, null=True)

    # Fields
    class_name = models.CharField(max_length=100)
    class_student_size = models.IntegerField(blank=True, null=True)
    class_subject = models.CharField(max_length=100)
    class_element_name = models.CharField(max_length=100)
    class_teacher_user = models.CharField(max_length=100)
    class_teacher_name = models.CharField(max_length=100, blank=True, null=True)
    eval_year = models.IntegerField(default=2022)
    class_random_key = models.CharField(max_length=8)
    eval_url = models.CharField(max_length=400)
    eval_open_datetime = models.DateTimeField(null=True, blank=True)
    created = models.DateTimeField(auto_now_add=True, editable=False)
    last_updated = models.DateTimeField(auto_now=True, editable=False)

您可以覆盖您的表单以始终将 eval_sent_state 字段设置为您在 save 方法中想要的值,但是您应该从表单字段中删除该字段

class ClassSchoolTeacherForm(forms.ModelForm):

    class Meta:
        model = ClassSchool
        exclude = ['eval_sent_state']

    def save(self, *args, **kwargs):
        self.instance.eval_sent_state_id = 2
        return super().save(*args, **kwargs)