Ответ 1
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date) \
.values('delivery_time')
delivery_times = DeliveryTime.objects.exclude(id__in=blocked_delivery_times)
У меня есть две следующие модели:
class DeliveryTime(models.Model):
delivery_time = models.CharField(max_length=15)
class BlockedDeliveryTime(models.Model):
delivery_date = models.DateField()
delivery_time = models.ForeignKey(DeliveryTime)
Я хочу вернуть все доступные сроки доставки в течение дня, то есть все DeliveryTime, за исключением BlockedDeliveryTime.
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date)
delivery_times = DeliveryTime.objects.all()
From delivery_times queryset Я хочу удалить все заблокированные_delivery_times.delivery_time
Как я могу это сделать? Какие-либо предложения?
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date) \
.values('delivery_time')
delivery_times = DeliveryTime.objects.exclude(id__in=blocked_delivery_times)
Для более новой версии Django (я использую 1.10) вы не должны использовать .object для второй строки.
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date) \
.values('delivery_time')
delivery_times = DeliveryTime.exclude(id__in=blocked_delivery_times)
С выпуском Django 1.11 вы можете использовать difference
, который использует оператор EXCEPT
SQL. Я думаю, что это может быть более эффективно, потому что вы не оцениваете запрос, чтобы получить список значений.