2013-08-09 4 views
-2

Вот код:В Django, как сортировать экземпляры дочернего модельного класса на основе поля его родительского класса модели?

class Brand(models.Model): 
    brand_name = models.CharField(max_length=200) 
    def __unicode__(self): 
     return self.brand_name 

class Product(models.Model): 
    product = models.ForeignKey(Brand) 
    product_name = models.CharField(max_length=300) 
    class Meta: 
     ordering = ['product_name'] 
    def __unicode__(self): 
     return self.product_name 

Скажем, у меня есть 2 брендов, каждый из которых 2 продуктов: Canon (камера, принтер) и Samsung (ноутбук, планшет). Когда я создаю экземпляры Продукта, я смогу сортировать их по их имени на странице администратора: камера, ноутбук, принтер, планшет. Все идет нормально. Но то, что я действительно хотел бы сделать, это отсортировать их по [Brand + Product], поэтому отсортированный список должен выглядеть следующим образом: «Canon - камера», «Canon - принтер», «Samsung - ноутбук», «Samsung - таблетки.

Для этого мне нужно каким-то образом получить доступ к значению поля brand_name из класса Product. Это возможно, и если да, то как? Или есть другой/лучший способ добиться такого рода сортировки?

ответ

-2

Найдено решение:

class Brand(models.Model): 
    brand_name = models.CharField(max_length=200) 
    class Meta: 
     ordering = ['brand_name'] 
    def __unicode__(self): 
     return self.brand_name 

class Product(models.Model): 
    product = models.ForeignKey(Brand) 
    product_name = models.CharField(max_length=300) 
    class Meta: 
     ordering = ['product', 'product_name'] 
    def __unicode__(self): 
     return self.product_name # or return str(self.product_name) + ' - ' +str(self.product) 
0

пытались ли вы:

class Meta: 
    ordering = ['product_name', 'product'] #or ordering = ['product', 'product_name'] 
def __unicode__(self): 
    return str(self.product_name) + " - " +str(self.product) 
+0

Это то, что я попытался первым, но это не сработало. Насколько я понимаю (и, возможно, я ошибаюсь, потому что я новичок в Django), _ordering_ ожидает, что поле может сортироваться, например CharField, тогда как «продукт» - это просто класс ForeignKey для бренда, и это не собираемся вернуть имя_маркета. Проблема в том, что Продукт не является подклассом Brand; единственная связь между двумя классами - ForeignKey, и я не знаю, может ли/как это можно использовать для извлечения значений полей из класса Brand. –

0

Вы можете получить доступ к нему в коде, как somemodel.brand.brand_name и в фильтр/запроса в brand__brand_name.

+0

Я не совсем уверен, как это использовать. Вы предлагаете реализовать заказ в файле модели или в файле администратора? –

+0

Везде, где это имеет смысл. –

+0

Как я понимаю, упорядочение должно происходить в файле модели (как показывает вышеприведенный код). Модель, содержащая эти 2 класса, называется _store_. Проблема в том, что если я вызываю store.brand.brand_name внутри класса Product, я получаю сообщение об ошибке (имя «store» не определено). Если я использую brand.brand_name, у меня нет ошибки, но она пуста. Мне что-то не хватает. –

Смежные вопросы