@IvanOne

Django ForeignKey как фильтровать выдачу?

Всем привет есть вот такая вот модель:
class Booking(models.Model):
    full_name = models.CharField(
        u'ФИО',
        max_length=128,
        default=u'[читатель]',
    )
    author = models.CharField(
        verbose_name=u'автор',
        max_length=128,
    )
    title = models.CharField(
        verbose_name=u'заглавие книги/журнала',
        max_length=128,
    )
    library = models.ForeignKey(
        Library,
        verbose_name=u'библиотека',
        
    )
    comment = models.TextField(
        verbose_name=u'комментарий',
        blank=True,
        null=True,
    )
    created_at = models.DateTimeField(
        verbose_name=u'запрос отправлен',
        auto_now_add=True,
    )
    updated_at = models.DateTimeField(
        verbose_name=u'последнее изменение',
        auto_now=True,
    )
    is_booking = models.CharField(
        verbose_name=u'бронирование',
        max_length=7,
        choices=(
            ('undec', u'Нет решения'),
            ('allow', u'Забронировано'),
            ('dec', u'Бронирование невозможно')
        ),
        default='undec',
    )
    decision_email = models.BooleanField(
        verbose_name=u'письмо отправлено',
        default=False,
        editable=False
    )
    email = models.EmailField(
        u'электонная почта',
        max_length=128
    )


И модель Library:
class Library(models.Model):
    title = models.CharField(
        max_length=120,
        verbose_name=u'название'
    )
    slug = models.SlugField(
        verbose_name=u'URL'
    )

    lead = models.CharField(blank=True, null=True, max_length=120, editable=False, verbose_name=u'Краткое описание')
    description = models.TextField(verbose_name=u'Полное описание', default=u'', null=True, editable=False)
    photo = FileBrowseField(directory='library_photo', max_length=255, blank=True, null=True, editable=False, verbose_name=u'Фотография')

    address = models.CharField(
        verbose_name=u'Адрес',
        max_length=220,
        default=u'',
        blank=True,
        null=True,
    )

Собственно задача какова: в шаблоне в форме нужно Вывести список объектов library при условии что одна библиотека не участвует в выборке по определенному условию, это условие в модели никак не учитывается. Вопрос собственно как лучше решить задачу:
1. В ForeignKey через аргумент limit_choices_to, но тогда я не понимаю как сделать выборку
2. В модели добавить свойство которое можно использовать при задании условия, но стоит ли? Ведь выборку нужно сделать только один раз на проекте на всем
Может еще варианты подскажете?
  • Вопрос задан
  • 2675 просмотров
Пригласить эксперта
Ответы на вопрос 1
@deliro
Не совсем понятна суть вопроса. Если вы знаете критерий, по которому не выводится (или выводится) какая-то часть, в форме используйте:
class YourBookingForm(ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)  # super(YourBookingForm, self) для python2
        self.fields['library'].queryset = Library.objects.exclude(pk=4)  # Удаляем из выборки по условию ненужные библиотеки
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы