简体   繁体   English

Django模型的XML及其相关模型

[英]XML of Django model and models related to it

I have a model class Equip, that it's a subclass of User (i think it doesn't matter) and a Player model. 我有一个模型类Equip,它是User(我认为没关系)和Player模型的子类。

class Team(auth.models.User):
    emaile = models.EmailField('email',null=False,unique=True,)
class Player(models.Model):
    name = models.CharField(max_length=50)
    team = models.ForeignKey(Equip)

In views i have: 在意见上,我有:

class ConnegResponseMixin(TemplateResponseMixin):

def render_xml_object_response(self, objects, **kwargs):
    xml_data = serializers.serialize(u"xml", objects, **kwargs)
    return HttpResponse(xml_data, content_type=u"application/xml")

def render_to_response(self, context, **kwargs):
    if 'extension' in self.kwargs:
        try:
            objects = [self.object]
        except AttributeError:
            objects = self.object_list
        return self.render_xml_object_response(objects=objects)
    else:
        return super(ConnegResponseMixin, self).render_to_response(context


class  teamDetail(DetailView, ConnegResponseMixin):
model = Equip
template_name = 'competition/team_detail.html'


def get_context_data(self, **kwargs):
    context = super(teamDetail,self).get_context_data(**kwargs)
    return context

How can I have a xml like: Team: Name:teamname email:teamemail players:{ player: name:playername player2: name:player2name 我该如何使用xml这样的XML:团队:名称:teamname电子邮件:teamemail玩家:{玩家:名称:playername玩家2:名称:player2name

I have tried to create a new class TeamXML 我试图创建一个新的类TeamXML

class TeamXML():
def __init__(self, equip):
    self.username = equip.username
    self.email = equip.correoe
    self.isTeamValid = equip.isTeamValid
    self.players = Jugador.objects.filter(team=equip)

and in the views I have changed the function render_xml_object_response to: 在视图中,我将函数render_xml_object_response更改为:

def render_xml_object_response(self, objects, **kwargs):
    if objects[0].__class__ == Team:
        objectA = TeamXML(objects[0])           
        xml_data = serializers.serialize(u"xml", objectA, **kwargs)
    else:
        xml_data = serializers.serialize(u"xml", objects, **kwargs)
    return HttpResponse(xml_data, content_type=u"application/xml")

But it returns to me the error: 'TeamXML' object is not iterable. 但是它向我返回了错误:“ TeamXML”对象不可迭代。 How can I do TeamXML iterable or how can I do to return a XML with team and players like attribute of team. 如何做可迭代的TeamXML或如何返回具有球队和球员(例如球队属性)的XML。

Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
111.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in view
69.             return self.dispatch(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/base.py" in dispatch
87.         return handler(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/views/generic/detail.py" in get
116.         return self.render_to_response(context)
File "/home/eloi/Models/DjangoLoL/LoL/competition/views.py" in render_to_response
  59.             return self.render_xml_object_response(objects=objects)
File "/home/eloi/Models/DjangoLoL/LoL/competition/views.py" in render_xml_object_response
  48.           xml_data = serializers.serialize(u"xml", objectA, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django/core/serializers/__init__.py" in serialize
  128.     s.serialize(queryset, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/serializers/base.py" in serialize
  52.         for obj in queryset:

Exception Type: TypeError at /team/10.xml
Exception Value: 'TeamXML' object is not iterable

Thanks, 谢谢,

I finnally solved with dexml. 我终于用dexml解决了。 https://pypi.python.org/pypi/dexml/ https://pypi.python.org/pypi/dexml/

With this: Models.py 与此:Models.py

class PlayerXML(dexml.Model):
    name = fields.String()
    rol = fields.String()
    email = fields.String()

    def __init__(self, player):
        self.name = player.name
        self.rol = player.rol
        self.email = player.email

class TeamXML(dexml.Model):
    username = fields.String()
    email = fields.String()
    players = fields.List(Jugador)

    def __init__(self, team):
        self.username = team.username
        self.email = team.correoe
        for item in Jugador.objects.filter(team=team):
            self.players.append(PlayerXML(item))

And Views.py: 和Views.py:

team_xml = TeamXML(objects[0])
team_xml = TeamXML(objects[0])
xml_data = team_xml.render()xml_data = team_xml.render()
return HttpResponse(xml_data, content_type=u"application/xml")

Thanks for the help :) 谢谢您的帮助 :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM