Django фильтрует одну модель с помощью другой модели

У меня есть две модели, и обе имеют внешние ключи с моделью User:

class UserCostCenter(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    cost_center = models.PositiveIntegerField()
    created_date = models.DateTimeField(auto_now_add=True)
    start_date = models.DateField(null=False, blank=False)
    end_date = models.DateField(null=True, blank=True)

class UserBooking(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    date = models.DateField()
    hours = models.DecimalField()
    task = models.ForeignKey(UserProject, on_delete=models.DO_NOTHING, null=True, blank=True)
    created_date = models.DateTimeField(auto_now_add=True)
    updated_date = models.DateTimeField(null=True, blank=True)
    history = HistoricalRecords(table_name='booking_history_userbooking')

Теперь я хочу исключить пользовательские записи, у которых нет центра затрат. В настоящее время я делаю вот так:

    queryset = UserBooking.objects.all()
    for booking in queryset:
        cost_center = UserCostCenter.objects.filter(
        Q(user=booking.user, start_date__lte=booking.date, end_date__gte=booking.date)
        | Q(user=booking.user, start_date__lte=booking.date,
            end_date=None)).first()
        if not cost_center:
            queryset = queryset.exclude(id=booking.id)

Я не хочу исключать объекты бронирования пользователей с помощью цикла for, пожалуйста, помогите!

Вы можете получить все UserBookings с записью в UserCostCenter следующим образом:

UserBooking.objects.filter(user__in=(UserCostCenter.objects.values_list('user', flat=True)
Вернуться на верх