Django查询设置到目录列表,无重复

Django查询设置到目录列表,无重复,django,dictionary,duplicates,django-queryset,Django,Dictionary,Duplicates,Django Queryset,我有以下几种型号 型号 class Player(models.Model): name = models.CharField(max_length=50) DOB = models.DateTimeField(auto_now_add=True) def __unicode__(self): return "%s" % self.name class League(models.Model): name = models.CharField

我有以下几种型号

型号

class Player(models.Model):
    name = models.CharField(max_length=50)
    DOB = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return "%s" % self.name


class League(models.Model):
    name = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    player = models.ForeignKey(Manager, related_name='players')


    def __unicode__(self):
        return "%s" % self.name
def exportdata(request):
    q = League.objects.all().select_related("player")

    content = []
    for record in q:
        info = {
            'players': [record.player.name],
            'leaguename' : record.name,
            'country': record.country
        }
        content.append(info)

    return HttpResponse(json.dumps(content))
视图

class Player(models.Model):
    name = models.CharField(max_length=50)
    DOB = models.DateTimeField(auto_now_add=True)

    def __unicode__(self):
        return "%s" % self.name


class League(models.Model):
    name = models.CharField(max_length=50)
    country = models.CharField(max_length=50)
    player = models.ForeignKey(Manager, related_name='players')


    def __unicode__(self):
        return "%s" % self.name
def exportdata(request):
    q = League.objects.all().select_related("player")

    content = []
    for record in q:
        info = {
            'players': [record.player.name],
            'leaguename' : record.name,
            'country': record.country
        }
        content.append(info)

    return HttpResponse(json.dumps(content))
响应

[{
    "players": ["Roman"], 
    "leaguename": "La liga",
    "country" : "Spain"
}, 
{
    "players": ["Anthon"], 
    "leaguename": "Premier",
    "country" : "UK"
}, 
{
    "players": ["Xavi"], 
    "leaguename": "La liga",
    "country": "Spain" 
}, 
{
    "players": ["Ronaldo"],
    "leaguename": "Premier ",
    "country": "UK"
},
{
    "players": ["Zessi"],
    "leaguename": "Championship ",
    "country": "Spain"
}
]
我想要一个JSON格式的球员名单(没有重复),这样我就可以从角度分析结果。我怎样才能做到这一点?预期答复的格式如下:

[
    {
        "players": [{"id" : 12,  "name": "Roman"}, {"id" : 150,  "name": "Xavi"}], 
        "leaguename": "La liga (Spain)"
    }, 
    {
        "players": [{"id" : 98,  "name": "Ronaldo"}, {"id" : 9,  "name": "Anthon"}], 
        "leaguename": "Premier (UK)"
    }, 
    {
        "players": [{"id" : 19,  "name": "Zessi"}], 
        "leaguename": "Championship (Spain)"
    }
]
我尝试的

def exportdata(request):
    leagues = League.objects.all().select_related("player")

    content = []
    players = []

    for league in leagues:
        # league doesn't exists so append it
        if not any(item['leaguename'] == league.name for item in content):
            content.append({"leaguename": league.name, 
                        "players": players.append({"id": league.player.id, "name": league.player.name})})
        else:
            # league already exists so don't append
            # players doesn't exists so append
            content.append({"leaguename": league.name, 
                        "players": players.append({"id": league.player.id, "name": league.player.name})})


    return HttpResponse(json.dumps(content))

为什么不直接返回
q
?for循环就是改变格式的东西为什么不直接返回
q
?你的for循环是改变格式的东西,如果leaguename已经存在,它应该只追加player(id,name)<代码>用于联盟中的联盟:results.append({'leaguename':league.name,'players':[{'id':league.player.id,'name':league.player.name}])您测试过吗?它将为每个联赛创建一个dict,其中包含他们的球员dict。由于我们正在迭代联赛对象,它们是唯一的。问题是什么?是的,我已经测试过了!问题是联赛名称不能重复。以及
league.Player.all()
不是有效的实例如果leaguename已经存在,则只应追加玩家(id,name)!
对于leagues中的league:results.append({'leaguename':league.name,'player':[{'id':league.player.id,'name':league.player.name}])
您测试过吗?它将为每个联赛创建一个dict,其中包含他们的球员dict。由于我们正在迭代联赛对象,它们是唯一的。问题是什么?是的,我已经测试过了!问题是联赛名称不能重复。并且
league.Player.all()
不是有效的实例