получить все экземпляры из родственных моделей - PullRequest
2 голосов
/ 22 октября 2010

У меня есть одна проблема. Ниже:

У меня есть эта модель:

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() 

В моем случае у меня есть модели ShoesSize для хранения всех ShoesSize и ShoesItem для хранения этого товара*

Как я могу получить все размеры и все магазины от экземпляра ShoesItem?Есть (например, не полный):

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')

, и я получаю список экземпляров моделей Предметов.После этого я хочу получить все доступные размеры и магазины для всех видов предметов

1 Ответ

1 голос
/ 23 октября 2010

Используйте обратный запрос, используя название модели.

Получить обувной предмет:

shoes_item = ShoesItem.objects.all()[0]

Получить объекты ShoesSize для объекта ShoesItem через объект Shoes:

sizes = ShoesSize.objects.filter(shoes__name=shoes_item)

Получить объекты Store для ShoesItem через объект Shoes:

shops = Store.objects.filter(shoes__name=shoes_item)

Подробнее - Поиск, охватывающий отношения

Для набора запросов 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...