将ForeignKey字段显示为简单输入字段,并仅将分配的选项显示为简单字符串

时间:2019-06-05 01:55:47

标签: python django django-models django-forms foreign-keys

我尝试显示只读信息,并希望将ForeignKey字段显示为简单字符串,以显示模型的当前状态。

我知道如何将选择限制在我所需要的范围之内。但是,仍然可以在该选项和“无”(-----)之间进行选择。

我也不想要<select>字段,我只想要<input>字段

目前,我通过在ModelForm类中定义额外的字段并手动将HTML中的所有内容手动添加到一起解决了该问题;如下所示。好吧,那太可怕了。

class MyForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        instance = getattr(self, 'instance', None)
        if instance and instance.pk:

            for field in self.fields:
                self.fields[field].required = False
                self.fields[field].widget.attrs['readonly'] = True

            self.fields['colour'] = {
                'value': self.instance.batch_colour,
            }

            self.fields['type'] = {
                'value': self.instance.shellfish_type,
            }

            self.fields['supplier'] = {
                'value': self.instance.supplier,
            }

    class Meta:
        model = Batch
        fields = '__all__'

如果我使用小部件并定义CharField(),我只会得到它们的ID

    class Meta:
        model = Batch
        fields = '__all__'

        widgets = {
            'colour': forms.CharField(),
            'type': forms.CharField(),
            'supplier': forms.CharField(),
            'comment': forms.Textarea(
                attrs={
                    'rows': 3,
                    'readonly': True,
                }
            ),
        }

我还尝试使用所示的def __init__(self, *args, **kwargs):设置覆盖class Meta中的值,但没有成功。我仍然只获得当前状态的个人ID。

self.fields['type'].widget.attrs['value'] = self.instance.type.name,

0 个答案:

没有答案