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()
不是有效的实例