2015-08-09 3 views
1

У меня есть две модели следующим образом:Вычесть один Джанго MySQL из другого

class UserSelection(models.Model): 
    soccerseason = models.IntegerField() 
    fixturematchday = models.IntegerField() 
    userid = models.IntegerField() 
    campaignno = models.IntegerField() 
    teamselection = models.IntegerField() 
    teamselectionid = models.IntegerField() 
    teamresult = models.CharField(max_length = 1) 
    teamgoals = models.IntegerField() 

class StraightredTeam(models.Model): 
    teamid = models.IntegerField(primary_key=True) 
    teamname = models.CharField(max_length=36) 
    teamcode = models.CharField(max_length=5) 
    teamshortname = models.CharField(max_length=24) 
    currentteam = models.PositiveSmallIntegerField() 

    def natural_key(self): 
     return self.teamshortname 

    class Meta: 
     managed = True 
     db_table = 'straightred_team' 

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

currentTeams = StraightredTeam.objects.filter(currentteam=1).order_by('teamshortname') 

cantSelectTeams = UserSelection.objects.filter(campaignno=398169).order_by('fixturematchday') 

В принципе, я бы например, чтобы исключить команды из текущего выбора тегов, которые находятся в cantSelectTeams. Поля, которые связывают эти два, объединяются из StraighRedTeam и teamselectionid из UserSelection.

Я знаю, что я могу запускать эти два запроса отдельно и создавать список, манипулируя им в python, но мне просто интересно, могу ли я сделать это, используя только запросы, возможно, объединив их?

Если вам нужна дополнительная информация, просто спросите. Если вам не нравится вопрос и голосуйте, пожалуйста, сообщите нам, почему я могу задавать лучшие вопросы в будущем.

Большое спасибо заранее, Алан.

ответ

3

Прежде всего, вы делаете это неправильно. Действительно действительно неправильно. Вам лучше использовать ForeignKeys для объединения моделей вместе.

Отвечая на вопрос, да, вы можете это сделать, и это довольно просто:

cantSelectTeams = UserSelection.objects.filter(campaignno=398169).order_by('fixturematchday') 

currentTeams = StraightredTeam.objects.filter(currentteam=1).exclude(teamid__in=cantSelectTeams.values_list('teamselectionid', flat=True)).order_by('teamshortname') 
+0

лучше, чем у меня. upvoted :) – Pynchia

+0

Oooops, я сделал это на предыдущих таблицах. Я просто возился и не делал этого здесь. Хороший крик. –

+1

Pynchia, большое спасибо за вашу поддержку по этому вопросу. Спасибо за помощь. –

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