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