J'ai les deux modèles suivants:
class DeliveryTime(models.Model):
delivery_time = models.CharField(max_length=15)
class BlockedDeliveryTime(models.Model):
delivery_date = models.DateField()
delivery_time = models.ForeignKey(DeliveryTime)
Je veux retourner tous les délais de livraison disponibles pour une journée, c'est-à-dire tous les DeliveryTime
à l'exclusion du BlockedDeliveryTime
.
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date)
delivery_times = DeliveryTime.objects.all()
De delivery_times
queryset je veux supprimer tout blocked_delivery_times.delivery_time
Comment puis je faire ça? Aucune suggestion?
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date) \
.values('delivery_time')
delivery_times = DeliveryTime.objects.exclude(id__in=blocked_delivery_times)
Pour une version plus récente de Django (j'utilise 1.10), vous ne devez pas utiliser .objects pour la deuxième ligne.
blocked_delivery_times = BlockedDeliveryTime.objects.filter(delivery_date=delivery_date) \
.values('delivery_time')
delivery_times = DeliveryTime.exclude(id__in=blocked_delivery_times)
Avec la sortie de Django 1.11, vous pouvez utiliser difference
, qui tire parti de l'opérateur SQL EXCEPT
. Je pense que cela pourrait être plus efficace car vous n'évaluez pas une requête pour obtenir une liste de valeurs.