django_select2 - ограничить возвращаемый текст определенным полем c в модуле - PullRequest
0 голосов
/ 09 мая 2020

Я использую 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?

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

...