Django QuerySet Any - PullRequest
       12

Django QuerySet Any

0 голосов
/ 09 марта 2020

Я хочу получить набор запросов для всех книг, которые в данный момент находятся в библиотеке (дата возврата текущей аренды установлена ​​на ноль). Я новичок в python и не знаю, как делать подзапросы в django. Другими словами, если требуется фильтровать каждое поле связанного объекта в условии, если только один related-object не соответствует этому условию, объект не должен быть возвращенным

models.py

class Book(models.Model):
    cod = models.CharField(max_length=255, unique=True)
    title = models.CharField(max_length=255)
    .....


class Rent(models.Model):
    dateRent = models.DateField(default=timezone.now)
    dateReturn = models.DateField(null=True, blank=True)
    book = models.ForeignKey(modelsBook.Book, on_delete=models.DO_NOTHING, related_name="rent")
    .....

PS: мне нужен этот подзапрос для отображения книги, которая в данный момент не отображается в файле choiceField

forms.py

class RentForm(forms.ModelForm):
    __pk=None

    def __init__(self, *args, **kwargs):
        self.__pk = kwargs.pop('pk', None)
        super(RentForm, self).__init__(*args, **kwargs)

    class Meta():
        model = models.Rent
        fields = ('book', 'student')      
        labels = {
            'book' : _('Libro'),
            'student' : _('Studente'),
        }
        widgets = {

            'book': queryset,
.....

1 Ответ

0 голосов
/ 09 марта 2020

Вы можете фильтровать объекты через related_name.

class RentForm(forms.ModelForm):
    __pk=None

    def __init__(self, *args, **kwargs):
        self.__pk = kwargs.pop('pk', None)
        super(RentForm, self).__init__(*args, **kwargs)

        self.fields['book'].queryset = Book.objects.exclude(rent__dateReturn__isnull=True)
   ...
...