2013-05-21 6 views
0

У меня есть класс под названием Toy, в котором игрушками являются либо животные, либо фрукты.Django Querying By Set Relationship (Reverse)

Некоторые примеры из моей базы данных,

|name|type|pk| 
|Jerry|Cat|33| 
|Scoobie|Dog|52| 
|Leslie|Dog|73| 
|Helen|Strawbery|86| 
|Mark|Banana|16| 

Когда пользователь выбирает «Animals», он должен вывести Джерри, Scoobie, Лесли, если он выбирает «Фрукты» он должен выводить Хелен, Марк.

мне нужно что-то вроде ниже

myDict={'Animal':'Cat' or 'Dog', 'Fruits':'Strawberry' or 'Banana'} 
Toy.objects.filter(type = myDict[input]) 

или

myDict={'Animal':['Cat' ,'Dog'], 'Fruits':['Strawberry' , 'Banana']} 
Toy.objects.filter(type in myDict[input]) 

, конечно, они не работают, какие-либо идеи, как я могу поступить?

ответ

1

Не зная, как ваша модель выглядит следующим образом:

Toy.objects.filter(type__in=["Dog", "Cat"]) 

или

Toy.objects.filter(type__in=["Strawberry", "Banana"]) 

и в-третьих (со всеми типами игрушек, что является плодом или животное)

Toy.objects.filter(type__in=["Dog", "Cat", "Strawberry", "Banana"]) 

С вы не храните «животное» как тип в соответствии с тем, что вы описали, вам не нужно {'Animal':[...], 'Fruit':[...]} ,

+0

ok 'type__in' решён, спасибо. Но мне все же нужен словарь, во всяком случае, неважно. Я приму этот ответ. –

+0

Я должен использовать 15 символов: Почему? С небольшой информацией, которую вы предоставили, и структурой базы данных, которую вы показали, вы мало используете для «Животных». Не могли бы вы разместить свою модель, пожалуйста? Это поможет мне помочь. –

+0

ну, вы говорите: 'if (input = animal) Toy.objects.filter (type__in = [" Dog "," Cat "]), else Toy.objects.filter (type__in = [" Strawberry "," Banana "]) '. Это тоже работает, но есть ли какие-то преимущества, чем использование словаря и пропущение if-else? –