2016-12-05 12 views
0

Я пытаюсь написать внутреннее соединение из двух моделей, но я застрял между ними.Не работает в Django

Мой models.py страница:

class MovieDetails(models.Model): 
    moviename = models.CharField(max_length=200) 
    movieid = models.CharField(primary_key=True, max_length=20) 
    def __str__(self): 
     return self.movieid 

class TheaterBase(models.Model): 
    theatername = models.CharField(max_length=500) 
    theaterid = models.CharField(primary_key=True, max_length=20) 
    def __str__(self): 
     return self.theaterid 

class MovieActiveDays(models.Model): 
    moviedetails = models.ForeignKey(MovieDetails, on_delete=models.CASCADE) 
    theaterbase = models.ForeignKey(TheaterBase, on_delete=models.CASCADE) 
    activedayid = models.CharField(primary_key=True, max_length=20) 
    def __str__(self): 
     return self.activedayid 

В Мой views.py страницы:

moviedetails_id = MovieActiveDays.objects.filter(theaterbase=theaterid,).values('moviedetails_id') 
result= MovieDetails.objects.filter(movieid=moviedetails_id) 

Первая строка фильтрует фильмы в зависимости от театров. Вторая строка будет извлекать более одной строки из базы данных. И всякий раз, когда я пытаюсь отправить результат в html шаблон, тогда он печатает только moviedetails_id, но не название фильма или его содержимого. Как распечатать все содержимое таблицы moviedetails.

Заранее спасибо

+5

Вы не должны думать, с точки зрения объединения. Расскажите нам, что вы пытаетесь сделать и какой результат вы хотите. –

+0

Пожалуйста, показать полный (релевантный) вид также – Sayse

+0

@ DanielRoseman Я хочу отобразить название фильма (из ** MovieDetails **), которое в настоящее время проецируется в конкретный театр (из ** TheaterBase **). Как фильмы будут меняться, но театры не будут. поэтому, чтобы присоединиться к этим моделям, я создал еще одну модель с именем ** MovieActiveDetails **, в которой хранятся только текущие фильмы, которые воспроизводятся в кинотеатрах. –

ответ

0

Основной принцип заключается в иметь дело с этими объектами, а не в виде таблиц базы данных. Вам нужны подробности фильма, поэтому начните с этого. Затем вы можете следить за отношениями через синтаксис двойного подчеркивания Django. Итак:

MovieDetails.objects.filter(movieactivedays__theaterbase_id=theaterid) 

Мы можем сделать это лучше, понимая, что MovieActiveDays это через таблицы в много-ко-многим между MovieDetails и TheaterBase:

class MovieDetails(models.Model): 
    ... 
    theatres = models.ManyToManyField('TheaterBase', through='MovieActiveDays') 

Теперь мы можем сократить запрос:

MovieDetails.objects.filter(theatres=theaterid) 

и Django позаботится обо всех объединениях для нас.

+0

Спасибо @ Daniel Roseman. Ваше решение помогло мне. –

0

здесь результат является объектом MovieDetails, так что вы можете получить

MOVIE_NAME = result.moviename