Как преобразовать этот запрос в «запрос модели django»? - PullRequest
0 голосов
/ 28 марта 2010

То, что я хочу, просто:

модели:


class userLastTrophy(models.Model):
   user     = models.ForeignKey(userInfo)
   platinum = models.IntegerField()
   gold    = models.IntegerField()
   silver  = models.IntegerField()
   bronze  = models.IntegerField()
   level   = models.IntegerField()
   rank    = models.IntegerField()
   perc_level = models.IntegerField()
   date_update = models.DateTimeField(default=datetime.now, blank=True)
   total   = models.IntegerField()
   points  = models.IntegerField()

class userTrophy(models.Model):
   user     = models.ForeignKey(userInfo)
   platinum = models.IntegerField()
   gold    = models.IntegerField()
   silver  = models.IntegerField()
   bronze  = models.IntegerField()
   total   = models.IntegerField()
   level   = models.IntegerField()
   perc_level  = models.IntegerField()
   date_update = models.DateTimeField(default=datetime.now, blank=True)
   rank    = models.IntegerField(default=0)
   total   = models.IntegerField(default=0)
   points  = models.IntegerField(default=0)
   last_trophy = models.ForeignKey(userLastTrophy, default=0)

У меня есть этот запрос:


select t2.user_id as id,
       t2.platinum - t1.platinum as plat,
       t2.gold     - t1.gold as gold,
       t2.silver   - t1.silver as silver,
       t2.bronze   - t1.bronze as bronze,
       t2.points   - t1.points as points from myps3t_usertrophy t2, myps3t_userlasttrophy t1 where
       t1.id = t2.last_trophy_id order by points;

как это сделать с моделями django?

1 Ответ

0 голосов
/ 06 декабря 2011

Просто сделайте так, чтобы была создана одна модель с полем для даты:

from django.contrib.auth.models import User

class Trophy(models.Model):
   user     = models.ForeignKey(User, related_name='trophies')
   creation_date = model.DateField(auto_now_add=True)

Вы заметите, что:

  • мы устанавливаем внешний ключ для пользовательской модели, а не userinfo. Таким образом, вы можете легко получить текущего пользователя и его трофеи. сделать UserInfo профилем пользователя
  • Трофей должен иметь первую букву в верхнем регистре. И префикс пользователя довольно бесполезен, если только вы не получили трофей за что-то другое, кроме пользователей.
  • Дата создания с auto_now_add, установленной в true, будет автоматически установлена ​​на текущую дату создания нового объекта
  • связанное имя позволяет вам дать естественное имя противоположному характеру вместо того, чтобы получать 'trophy_set'

Затем вы можете получить все последние трофеи следующим образом:

# we get the last 3 trophies, '-' sort from last to first
print user.trophies.order_by('-creation_date')[:3]
...