#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. Если ваша проблема решена, пожалуйста, выберите этот ответ как правильный ответ и проголосуйте за него