2013-09-03 2 views
1

Поэтому у меня есть эти модели:Джанго, фильтр несколько значений

Bands(models.Model): 
    mgmt = models.ForeignKey(User) 
    name = models.Charfield(max_length=200) 

Contracts(models.Model): 
    band = models.ForeignKey(Bands) 
    start_date= models.DateField() 

BookedGig(models.Model): 
    for = models.ForeignKey(Bands) 
    under= models.ForeignKey(Contracts) 
    date = models.DateField() 

Как бы я построить что-то в моем views.py файл, чтобы захватить все BookedGigs для пользователя? Моя цель - просто отобразить через шаблон, различные концерты под заголовком контактов/диапазонов .

в views.py я в настоящее время

def Home(request): 
    user = request.user 
    bands = Bands.objects.filter(mgmt=user).order_by('name') 
     #This will give me the bands belonging to a user 
    contracts = Contracts.filter(band=bands) 
     #But here bands is not one value but a queryset. 

    #if I try 
    contracts = bands.booked_gig_set.all() 
    I get 'QuerySet' object has no attribute 'booked_gig_set' 

шаблоны: Я знаю, что это неправильно, но это, как я хотел бы, чтобы отобразить список.

{% for b in bands %} 
    Band:{{b.name}} 
    {% for c in contracts %} 
     Contract Start:{{c.start_date}} 
     {% for g in gigs %} 
      {{g.dates}} 
     {% endfor %} 
    {% endfor %} 
{% endfor %} 

Благодаря

ответ

3
Contracts.objects.filter(band__in=bands) 

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

contracts = Contracts.objects.filter(band__in=bands).prefetch_related() 
+0

Просто проверите, вы имеете в виду это с «.объектами» между справа? – theptrk

+0

@Patrick Упс, извините: да. –

+0

Я новичок в Django, но должен ли вы использовать поле ManyToMany? https://docs.djangoproject.com/ru/dev/topics/db/examples/many_to_many/ – pfrank

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