2016-12-19 3 views
0

Мой models.py:Как преобразовать запрос Raw Sql Джанго Модель

class TheaterShowTimings(models.Model): 
    showname = models.CharField(max_length=100) 
    showtime = models.TimeField() # stores only time 
    theatershowtimingsid = models.CharField(primary_key=True, max_length=100) 
    def __str__(self): 
     return self.theatershowtimingsid 


class MovieActiveDays(models.Model): 
    date = models.DateField() # stores single only date 
    moviedetails = models.ForeignKey(MovieDetails, on_delete=models.CASCADE) 
    theaterbase = models.ForeignKey(TheaterBase, on_delete=models.CASCADE) 
    activedayid = models.CharField(primary_key=True, max_length=100) 
    def __str__(self): 
     return self.activedayid 

class ActiveShowTimings(models.Model): 
    TheaterShowTimings = models.ForeignKey(TheaterShowTimings, on_delete=models.CASCADE) 
    MovieActiveDays = models.ForeignKey(MovieActiveDays, on_delete=models.CASCADE) 
    activeshowid = models.CharField(primary_key=True, max_length=100) 
    def __str__(self): 
     return self.activeshowid 

Мой views.py:

show_name_list = TheaterShowTimings.objects.raw('SELECT distinct * FROM Book_TheaterShowTimings where theatershowtimingsid IN (select TheaterShowTimings_id from Book_ActiveShowTimings where MovieActiveDays_id IN (select activedayid from Book_MovieActiveDays where date = "2016-12-19")) order by showtime ASC') 

выше запрос в views.py является работает хорошо. Но я хочу преобразовать его в набор запросов django. помогите мне, я застрял в преобразовании этого необработанного SQL-запроса в queryset.

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

ответ

1

Вы можете достичь этого, используя ManyToManyField.

требуется только два шага:

  1. Создать ManyToManyField полей movieActiveDays для TheaterShowTimings.
  2. Сделайте запрос с новым полем movieActiveDays.
определение модели
class TheaterShowTimings(models.Model): 
    showname = models.CharField(max_length=100) 
    showtime = models.TimeField() # stores only time 
    theatershowtimingsid = models.CharField(primary_key=True, max_length=100) 
    # many to many fields to MovieActiveDays 
    movieActiveDays = models.ManyToManyField('MovieActiveDays', through='ActiveShowTimings') 
    def __str__(self): 
     return self.theatershowtimingsid 

Запрос:

TheaterShowTimings.objects.filter(movieActiveDays__date='2016-12-19').distinct() 
+0

Стоит отметить, что добавление этого поля не изменяет структуру базы данных на всех; он будет использовать существующую таблицу. –

+0

Что вы имеете в виду, именно г-н @ DanielRoseman –