Django ModelChoiceField показывает объекты клиентов (1) и т. Д. В списке, как мне заставить его отображать имена клиентов?

#django #modelchoicefield

#django #modelchoicefield

Вопрос:

models.py

 class Customers(models.Model):
    Name = models.CharField(max_length=100)

class Staff(models.Model):
    Name = models.CharField(max_length=100)

class Cereals(models.Model):
    Name = models.CharField(max_length=100)
    Operator = models.CharField(max_length=100)
  

forms.py

 class EditCereals(forms.ModelForm):
    class Meta:
        model = Cereals
        fields = ['Name', 'Operator']

    widgets = {
        'Operator': Select(),
        'Name': Select(),
    }

    def __init__(self, *args, **kwargs):
        super(EditCereals, self).__init__(*args, **kwargs)
        self.fields['Name'] = forms.ModelChoiceField(queryset=Customers.objects.all().order_by('Name'))
        self.fields['Operator'] = forms.ModelChoiceField(queryset=Staff.objects.all().order_by('Name'))
  

Когда я запускаю форму «Name», в ней отображаются объекты клиентов (1), объекты клиентов (2) и т. Д., И то же самое с «Operator», Он показывает объекты персонала (1), объекты персонала (2) и т. Д

Как мне заставить его отображать фактические имена, например, Билл, Фред,

Ответ №1:

Вы должны использовать def __str__()... метод. Этот метод работает для строкового представления любого объекта.

Пример

 class Customers(models.Model):
    name = models.CharField(max_length=100)
    
    def __str__(self):
        return self.name
  

И, пожалуйста, назовите переменную экземпляра маленькими буквами с подчеркиванием. Заголовочные регистры должны использоваться только для классов.

Комментарии:

1. Если ваша проблема решена, пожалуйста, выберите этот ответ как правильный ответ и проголосуйте за него