如何在一定情况下使模型表单的一个字段变为只读(Django)?

2024-10-02 12:24:54 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我的models.py中有这些类:

class Result(models.Model):
  grade = models.CharField(max_length=10)
  checked = models.BooleanField(blank=False, default=False) 
  checker = models.ForeignKey(User, on_delete=models.CASCADE)

class User(models.Model):
  name = models.CharField(max_length=10)

假设我的forms.py中有一个模型表单:

class EnterResult(forms.ModelForm):
    class Meta:
       model = Result
       exclude = ['checked']

我知道要在views.py中传递表单实例,您必须:

result = Result.objects.get(pk=pk)
form = EnterResult(instance=result)
return render(request, ...)

现在,当传递的实例具有其字段checked = True时,如何使checker成为只读输入。我觉得它与重写___init___(self, *args, **kwargs)有关


Tags: pyfalse表单modelmodelscheckerformsresult
1条回答
网友
1楼 · 发布于 2024-10-02 12:24:54

是的,为表单重写__init__是需要做的事情

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    instance = getattr(self, 'instance', None)
    if instance and instance.checked:
        self.fields["checker"].disabled = True

https://docs.djangoproject.com/en/3.0/ref/forms/fields/#disabled

相关问题 更多 >

    热门问题