Monday, September 21, 2020

How can I filter django many to many models?

class User(PermissionsMixin, AbstractBaseUser):
name = models.CharField(max_length=511, null=True, blank=True)
email = models.EmailField(unique=True)
phone_number = PossiblePhoneNumberField(blank=True, null=True, default=None)

addresses = models.ManyToManyField(Address, blank=True)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
# is_featured = models.BooleanField(default=True)
note = models.TextField(null=True, blank=True)
date_joined = models.DateTimeField(default=timezone.now, editable=False)
default_shipping_address = models.ForeignKey(
Address, related_name='+', null=True, blank=True,
on_delete=models.SET_NULL)
default_billing_address = models.ForeignKey(
Address, related_name='+', null=True, blank=True,
on_delete=models.SET_NULL)

class Order(models.Model):
created = models.DateTimeField(
default=now, editable=False)
status = models.CharField(
max_length=32, default=OrderStatus.UNFULFILLED,
choices=OrderStatus.CHOICES)
buyer_user = models.ForeignKey(
settings.AUTH_USER_MODEL, blank=True, null=True, related_name='buyer_orders',
on_delete=models.SET_NULL)
vendor_users = models.ManyToManyField(
settings.AUTH_USER_MODEL, blank=True, related_name='vendor_orders')

order_updated_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='order_updated_user',
on_delete=models.SET_NULL,
blank=True, null=True)

is_ready_for_aadibd = models.BooleanField(default=False)
is_ready_for_shipment = models.BooleanField(default=False)
is_delivered = models.BooleanField(default=False)

seller_list = User.objects.select_related('vendor_details').prefetch_related('vendor_orders').filter( groups__name="vendor", vendor_details__isnull=False, vendor_orders__is_delivered=True).order_by( 'vendor_details__company_name').distinct()
User.objects.select_related('vendor_details').prefetch_related('vendor_orders').filter( groups__name="vendor", vendor_details__isnull=False, vendor_orders__is_delivered=True).order_by( 'vendor_details__company_name').distinct()

Date filter
seller_list = seller_list.filter(vendor_orders__created__date__gte=default_last_month_start_days, vendor_orders__created__date__lte=default_last_month_last_days)



Also I'm using filter with exclude(is_delivered=False), but I didn't get my results.

I would like to filter (also using date, order id) my User who has delivery status only is_delivered=True. I want only users for who all of their deliveries are delivered. Like order id 2980 and It was associated with three sellers. I got the three sellers when I filtered. How can I do that?


--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/764f52cc-6a52-4297-b298-c6d949b4d763n%40googlegroups.com.

No comments:

Post a Comment