数据结构背后的概念
在游戏室中,用户可以设置自己可以使用最大插槽数的Battle
。一方面有一个SuperHero
与多个BadGuy
。 BadGuy
可以选择一个助推器,让他在战斗中暂时变得强大。
注意: 请记住,这是一个简化版本,专注于模型之间的关系(因为这是我的问题所在),现实中有更多的领域。
当前数据结构
from django.db import models
from django.contrib.auth import get_user_model
User = get_user_model()
class Battle(models.Model):
name = models.CharField(max_length=200)
start_time = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return "Battle '{0}'".format(name)
def get_contestant_from_user(self, user):
if user == self.superhero.user:
return self.superhero
elif user in self.bad_guy_set.all():
return self.bad_guy_set.get(user=user)
else:
raise Exception("User '{0}' is not a contestant in "
"this battle".format(user.__unicode__()))
class Contestant(models.Model):
user = models.ForeignKey(User)
class Meta:
abstract = True
class SuperHero(Contestant):
battle = models.OneToOneField(battle)
def __unicode__(self):
return "Super hero '{0}' of {1}".format(self.user, self.battle)
class BadGuy(Contestant):
battle = models.ForeignKey(battle)
has_booster = models.NullBooleanField(null=True)
def __unicode__(self):
return "One of the bad guys '{0}' of {1}".format(self.user, self.battle)
现在我需要通过Ajax进行前端调用,并确定最干净的工作方式是通过REST API(Django REST framework)。
/battle/3/
是一个战斗网址的示例(战斗在这样的网页上完成)。这里3
是正在进行的战斗的pk
。
我知道我可以通过Django REST框架获取当前Battle
(通过类似DetailView的API调用)和当前User
的数据。
但我不知道的是如何通过一次api通话获取给定用户的参赛者数据(SuperHero
模型或BadGuy
模型) 。我可以吗api调用get_contestant_from_user
的{{1}}方法?