How can I filter django many to many models?

25 views
Skip to first unread message

Asaduzzaman Sohel

unread,
Sep 22, 2020, 2:21:13 AM9/22/20
to Django users
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?


Message has been deleted

coolguy

unread,
Sep 22, 2020, 10:39:48 AM9/22/20
to Django users
in your line below you are using field named 'vendor_details' which should be in User model... but i don't see it there... can you please check again

seller_list = User.objects.select_related('vendor_details')  
Reply all
Reply to author
Forward
0 new messages