Отобразить поле ForeignKey как простой входной файл и показать только назначенный выбор в виде простой строки - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь отображать информацию только для чтения и хотел бы отображать поля 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 (), я получаю только их идентификаторы

    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, но безуспешно.Я все еще получаю только отдельные идентификаторы текущего состояния.

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