В forms.ModelForm выберите раскрывающийся список, не отображая значения в queryset () правильно - PullRequest
0 голосов
/ 25 апреля 2020

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

[models.py]
from django.contrib.auth.models import User

class Post(models.Model):
  title = models.CharField()
  author = models.ForeignKey(User, on_delete= models.CASCADE)

[forms.py]
from django.contrib.auth.models import User

class PostForm(forms.ModelForm):
  class Meta:
    model = Post
    fields = ['title','author']

    widgets = {
      'author': Select(attrs={'style': 'width: 400px;'}),
    }

  def __init__(self, *args, **kwargs):
    super(PostForm, self).__init__(*args, **kwargs)
    self.fields['author'].queryset = User.objects.values_list('first_name')

, и вот что показывает раскрывающийся список «Выбор автора»:

Author

как мне сделать так, как показано ниже:

-----
Admin
John

1 Ответ

1 голос
/ 25 апреля 2020

Чтобы переопределить метку, используемую в ModelChoiceField, необходимо создать подкласс и переопределить label_from_instance. В конце документа для поля

from django.forms import ModelChoiceField

class UserChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return obj.first_name

class PostForm(forms.ModelForm):

   author = UserChoiceField(User.objects.all())

   class Meta:
       model = Post
       fields = ['title','author']

       widgets = {
          'author': Select(attrs={'style': 'width: 400px;'}),
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...