Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- cs = City.objects.all().prefetch_related('shops')
- SELECT ••• FROM `catalog_city`
- SELECT ••• FROM `catalog_shop` WHERE `catalog_shop`.`city_id` IN (1, 2, 3, 4, 5, 6)
- SELECT ••• FROM `catalog_shop` INNER JOIN `catalog_city` ON (`catalog_shop`.`city_id` = `catalog_city`.`id`) WHERE `catalog_shop`.`city_id` = 1
- SELECT ••• FROM `catalog_shop` INNER JOIN `catalog_city` ON (`catalog_shop`.`city_id` = `catalog_city`.`id`) WHERE `catalog_shop`.`city_id` = 2
- class City(models.Model):
- name = models.CharField(verbose_name='город', max_length=200)
- code = models.IntegerField(verbose_name='код города')
- def __str__(self):
- return self.name
- class Meta:
- verbose_name = "город"
- verbose_name_plural = "города"
- class Shop(models.Model):
- adress = models.CharField(max_length=255, verbose_name="адрес")
- phone = models.CharField(max_length=150, verbose_name="телефон")
- map_script = models.TextField(verbose_name="скрипт карты")
- worktime = models.CharField(max_length=255, verbose_name="режим работы")
- stock = models.OneToOneField(Stock, related_name='sshop')
- firm = models.OneToOneField(Firm, related_name='fshop')
- city = models.ForeignKey(City, related_name='shops')
- created_at = models.DateTimeField(auto_now_add=True)
- updated_at = models.DateTimeField(auto_now=True)
- objects = ShopManager()
- def __str__(self):
- return "%s" % (self.adress)
- def get_absolute_url(self):
- return reverse('shop_detail', kwargs={'pk': self.pk})
- class Meta:
- verbose_name = "магазин"
- verbose_name_plural = "магазины"
- def cities_shops(request):
- shops = Shop.objects.all().prefetch_related('city')
- cities = {}
- for shop in shops:
- if shop.city.pk not in cities.keys():
- cities[shop.city.pk] = {'name': shop.city.name, 'code': shop.city.code, 'shops': []}
- cities[shop.city.pk]['shops'].append(shop)
- cs = City.objects.all().prefetch_related(Prefetch('shops', queryset=Shop.objects.all()))
- return {'citys': cs, 'cities': cities}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement