2012-04-17 1 views
1

У меня есть эти модели:Если мне нужен вид базы данных или нет?

class Company(models.Model): 
    name=models.CharField(max_length=100) 
    description=models.TextField() 
    #some more fields 

class Product(models.Model): 
    name=models.CharField(max_length=100) 
    company=models.ForeignKey(Company) 
    #some more fields 

class Category(models.Model): 
    parent=models.ForeignKey('self',null=True,blank=True) 
    name=models.CharField(max_length=100) 
    products=models.ManyToManyField(Product,null=True,blank=True) 
    #some more fields 

, как U можно увидеть у каждой компании есть перечень продукции, и каждый продукт относится к некоторым категориям, я собираюсь получить список категорий каждой компании, используя company pk, что Лучшая практика? Я должен определить представление базы данных? Как я могу это сделать?

Примечание: я никогда не пользовался представлением базы данных в django, я искал об этом, и это не звучит легко для меня!

+0

Что ваш вопрос.? Как получить категории, соответствующие компании? – agf

+0

да, лучшая практика для этого! –

ответ

2

Я всегда стараюсь избегать использования представлений базы данных, хранимых процедур и вообще вещей, которые «живут» в самой базе данных, а не в кодовой базе приложения по той простой причине, что ее очень сложно поддерживать (а также вы попрощайтесь с агностическими приложениями базы данных).

Мой совет здесь состоит в том, чтобы придерживаться django orm (что может многое сделать), и только если вам не удастся добиться достойных результатов или вам понадобится какая-то расширенная функция, доступная через хранимые процедуры/представления только тогда, чтобы пойти на это решение.

Использование просмотров в django довольно просто.

Скажите, что у вас есть 1 вид запроса, вы создаете представление на db, тогда вы пишете модель с полями, соответствующими столбцам вида (имя и тип).

UPDATE: Затем вам необходимо указать имя таблицы в качестве имени представления в определении метакласса.

После этого вам нужно сказать Джанго не писать о том, что и не пытаться создать таблицу для модели представления, к счастью, есть конф для этого:

class ViewModel(models.Model): 
    ... view columns ... 

    class Meta(): 
     db_table = 'view_name' 
     managed = False 
+0

вещь, которую я не понимаю, заключается в том, как связать модели с представлением? –

+0

@Asma жаль, что я забыл упомянуть об этом, вы можете увидеть в ответе сейчас :) –

+0

Я не вижу изменений в ответе: D –

1

Я понятия не имею, почему вы думаете, что вам нужен вид db здесь. Как правило, вы не используете их с Django, так как вы выполняете всю логику в Python через ORM.

Чтобы получить список категорий для компании, вы можете просто сделать:

categories = Category.objects.filter(products__company=my_company) 

где my_company является экземпляром компании вы заинтересованы в

+0

Я не акцентирую себя на использовании Я просто хочу сделать это с хорошей производительностью, потому что у меня есть несколько компаний с каждой тематикой с множеством продуктов, tnx :) –

+0

этот способ не имеет проблем с производительностью? Если это так, U будет использовать ORM. –

+0

@Asma Попробуйте и посмотрите, есть ли проблемы с производительностью. Если вы этого не сделали - это хорошая производительность. – DrTyrsa

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