可以为此数据结构调用Api吗?

时间:2014-01-23 11:40:58

标签: django rest django-rest-framework

数据结构背后的概念

在游戏室中,用户可以设置自己可以使用最大插槽数的Battle。一方面有一个SuperHero与多个BadGuyBadGuy可以选择一个助推器,让他在战斗中暂时变得强大。

注意: 请记住,这是一个简化版本,专注于模型之间的关系(因为这是我的问题所在),现实中有更多的领域。

当前数据结构

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}}方法?

0 个答案:

没有答案