Я использую django_select2 в своем приложении. Я хотел бы выполнять поиск и отображать только в соответствии с одним полем модели.
models.py:
class Venue(models.Model):
venue_name = models.CharField(max_length=50)
venue_city = models.CharField(max_length=50)
venue_country = models.CharField(max_length=50)
def __str__(self):
return f"{self.venue_name}, {self.venue_city}, {self.venue_country}"
forms.py:
from django import forms
from .models import
from django_select2 import forms as s2forms
class VenueForm(forms.ModelForm):
class Meta:
model = Venue
fields = ['venue_name', 'venue_city', 'venue_country']
widgets = {
'venue_city': s2forms.ModelSelect2Widget(model=Venue,
search_fields=['venue_city__icontains']),
'venue_country': s2forms.ModelSelect2Widget(model=Venue,
search_fields=['venue_country__icontains']),
}
Выше код успешно отфильтрован по полю venue_city
. Тем не менее возвращает целиком __str__(self)
. Как я могу заставить его возвращать только поля города и страны, чтобы пользователи видели только город или страну из раскрывающегося списка соответствующих <input>
s?
Мне нужно настроить только эту спецификацию c экземпляр виджета, потому что я использую полную возвращаемую строку __str__(self)
где-то еще.
Идея
Создает дополнительные модели, например:
class VenueCity(models.Model):
venue_name = models.OneToOneField(Venue, on_delete=models.SET_NULL, null=True)
def __str__(self):
return str(self.venue_name__venue_city) #how do I return only the name?
который я затем использую в своем виджете в качестве возможного решения?