Reputation: 75
I have one problem Looking below:
I have this model:
class Shoes(models.Model):
shop = models.ForeignKey(Store, related_name="%(class)s")
name = models.ForeignKey(ShoesItem)
size = models.ManyToManyField(ShoesSize, help_text=_("Get useful sizes"))
price = models.IntegerField()
in my case, I have models ShoesSize for store all ShoesSize and ShoesItem for store this Item
How can I get all sizes and all shops from ShoesItem instance? there are (not full, for example):
class Store(models.Model):
name = models.CharField(max_length=255)
class Item(models.Model):
name = models.CharField(max_length=255)
brand = models.ForeignKey(Brand, related_name="%(app_label)s_%(class)s")
sysname = models.SlugField(max_length=255)
has_shop = models.BooleanField(editable=False, default=False)
description = models.TextField(blank=True, verbose_name="Описание")
color = models.ManyToManyField(Color, blank=True, related_name='%(app_label)s_%(class)s')
and I get list of instances of Item models. After that, I want to get all available sizes and shops for all kind of items
Upvotes: 3
Views: 4491
Reputation: 3046
Use a reverse query by using the model name.
Get a ShoesItem:
shoes_item = ShoesItem.objects.all()[0]
Get ShoesSize objects for the ShoesItem via Shoes object:
sizes = ShoesSize.objects.filter(shoes__name=shoes_item)
Get Store objects for the ShoesItem via Shoes object:
shops = Store.objects.filter(shoes__name=shoes_item)
See more - Lookups that span relationships
For a queryset of ShoesItem:
shoes_items = ShoesItem.objects.filter(has_shop=True)
sizes = ShoesSize.objects.filter(shoes__name__in=shoes_items)
shops = Store.objects.filter(shoes__name__in=shoes_items)
Upvotes: 3