Django - 在 "select"中添加在线列

标签 django

我不知道这是否是解决我的问题的最佳方法,如果不是,请告诉我:)

我有这个模型:


class userTrophy(models.Model):
 user     = models.ForeignKey(userInfo)
 platinum = models.IntegerField()
 gold    = models.IntegerField()
 silver  = models.IntegerField()
 bronze  = models.IntegerField()
 level   = models.IntegerField()
 perc_level  = models.IntegerField()
 date_update = models.DateField(default=datetime.now, blank=True)

现在我想检索一个用户信息,但我想在线添加 3 个新“列”:

总计=白金+金+银+铜

积分=白金*100+金*50+银*25+青铜*10

并按“点”排序,排序后,放入一个新列,序号为:rank(1-n)。

我可以仅使用模型来完成此操作(或部分操作)吗?

最佳答案

我确信有很多方法可以实现这种行为。我现在想到的是Custom Model Manager和 transient 模型场。

你的类可能看起来像这样:

from django.db import models
from datetime import datetime

class UserTrophyManager(models.Manager):
  def get_query_set(self):
    query_set = super(UserTrophyManager, self).get_query_set()

    for ut in query_set:
      ut.total = ut.platinum + ut.gold + ut.silver + ut.bronze
      ut.points = ut.platinum * 100 + ut.gold * 50 + ut.silver * 25 + ut.bronze * 10

    return query_set

class UserTrophy(models.Model):
  user         = models.CharField(max_length=30)
  platinum     = models.IntegerField()
  gold         = models.IntegerField()
  silver       = models.IntegerField()
  bronze       = models.IntegerField()
  level        = models.IntegerField()
  perc_level   = models.IntegerField()
  date_update  = models.DateField(default=datetime.now, blank=True)

  total        = 0
  point        = 0

  objects      = UserTrophyManager()

  class Meta:
    ordering = ['points']

因此您可以使用以下方法来计算总分和分数:

user_trophies = userTrophy.objects.all()

for user_trophy in user_trophies:
    print user_trophy.total

关于Django - 在 "select"中添加在线列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1809305/

相关文章:

python - 作为没有信用卡的学生设置 Heroku 插件

python - Django:在 models.py 中 save() 期间 PositiveIntegerField 中 ManyToMany 字段的计数

python,哈希函数选择

django - 如何让 Django 根据 HTTP 请求中的 "Host" header 确定要使用哪个 Site 对象?

Django Imagekit 背景填充

django - 如何正确使用 djangify 和 django 框架?

Django 表单 queryset=model.objects.all() 加载缓慢

python - 在 url 调度中存储 bool 变量

python - 使用内联保存时的 Django Admin ValidationError

django - django 应用程序中 redis-queue 队列的命名空间