Django извлекает все связанные атрибуты для модели - PullRequest
1 голос
/ 15 ноября 2011

Я пишу приложение для магазина.Скажем, The Store A, Store A может иметь несколько пользователей, и каждый пользователь может принадлежать нескольким магазинам.Тем не менее, у каждого магазина есть Продукты, и каждый Продукт имеет связанные с ними размеры.

class Variation(models.Model):
    product = models.ForeignKey("Product")
    size = models.CharField(choices=SIZES, max_length=5)
    pid = models.CharField(unique=True, max_length=100, verbose_name="Product ID")
    id_type = models.CharField(max_length=5, choices=ID_TYPES, default="UPC")
    price = models.DecimalField(max_digits=5, decimal_places=2)
    store = models.ForeignKey("Store")

    class Meta:
        unique_together  = ("store", "pid")

class Product(models.Model):
    item = models.CharField(max_length=100, verbose_name="Parent SKU", help_text="reference# - Color Code")
    # Google docs sp key
    store = models.ForeignKey(Store)

class Store(models.Model):
    name = models.CharField(max_length=100)
    store_id = models.PositiveIntegerField(unique=True)
    admins = models.ManyToManyField(User)
    objects = StoreManager()

    def __unicode__(self):
        return self.name

, поэтому мне пришлось написать собственный менеджер для Продукта, чтобы отфильтровать все продукты по магазину и переопределить метод набора запросов для этого.класс администратора модели, и сделать это для КАЖДОГО атрибута, принадлежащего указанному магазину.Таким образом, в основном мой вопрос заключается в том, есть ли способ отфильтровать все атрибуты, относящиеся к магазину для каждого магазина, например, товары, билеты, варианты

РЕДАКТИРОВАТЬ Это менеджер продукта до сих пор

class ProductManager(models.Manager):
    def active(self, **kwargs):
        return self.filter(in_queue=False, **kwargs)

    def by_store(self, store=None, **kwargs):
        return self.filter(store__id__exact=store, **kwargs)

    def from_user(self, request):
        qs = self.model.objects.none()
        for store in request.user.store_set.all():
            qs = qs | store.product_set.filter(in_queue=False)
        return qs

В общем, для отображения продуктов на странице списка изменений я использую метод from user, который возвращает все продукты, доступные зарегистрированному пользователю

1 Ответ

1 голос
/ 15 ноября 2011

звучит так, как будто вы хотите использовать фреймворк django "Sites"

добавить ForeignKey в магазин, чтобы указать на сайт и сделать его уникальным.

может быть целесообразно указать на этой точке также и иностранные ключи Вариаций и продуктов на Сайте, а не в Магазине, чтобы в ваших представлениях вы могли отфильтровать результаты по текущему сайту.

...