Как установить attr из поля модели в формах в django - PullRequest
1 голос
/ 08 октября 2019

Как установить определенный атрибут для шаблона HTML на основе возвращаемого значения метода модели или только имени поля модели?

Я уже знал, что можно переопределить поля с помощью функции __init__ или виджетов, подобных этому:

models.py

class Item(models.Model):
        title = models.CharField(verbose_name=u"name", max_length=200, blank=False, null=False)

        def __str__(self):
                return ("%s" % self.title)

forms.py

class ItemForm(forms.ModelForm):
        class Meta:
            model = Item

fields = ['title',]

widgets = {
         'title': forms.RadioSelect(attrs={
                 'class': 'radioselect',
                 'item_name': 'title name?' # <- i want to have title name here of each not statis string
          }),
}
def __init__(self, *args, **kwargs):
    super(ItemForm, self).__init__(*args, **kwargs)
          self.fields['title'].widget.attrs.update({
                  'item_name': '' # <- i want to have title name here of each not statis string
          })

однако я хочу задать конкретное имя поля на основе ранее определенных полей в модели, а не просто статической строки, как в вышеупомянутом примере. Если я добавлю Item в базу данных с title = "Apple" , я хочу вставить эту строку в этот атрибут, чтобы получить такой ожидаемый результат, как этот в шаблонах:

<input type="radio" class="radioselect" item_name="Apple">

1 Ответ

1 голос
/ 08 октября 2019

Вам не нужен ModelForm, и вам не нужны динамические поля. Вам нужна обычная форма, содержащая один ModelChoiceField, который будет использовать набор запросов для автоматического заполнения себя всеми вариантами выбора.

class ItemForm(forms.Form):
    title = forms.ModelChoiceField(
        queryset=Item.objects.all(),
        widget=forms.RadioSelect(attrs={'class': 'radioselect'})
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...