我不知道这是否是解决我的问题的最佳方法,如果不是,请告诉我:)
我有这个模型:
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/