Django - get()返回多个<entity> - 它返回5 </entity>

时间:2014-11-25 11:45:26

标签: python mysql django

我正在使用Django 1.8dev,这对django来说非常新。我有一个基于mys view创建的模型,如create view arter_to_referencer as select ...

class SpeciesToReferences(models.Model):
    species_id = models.IntegerField(db_column='species_id')
    reference_id = models.IntegerField(db_column='reference_id')
    reference = models.CharField(db_column='Reference', max_length=255, blank=True, primary_key=True)
    beset = models.CharField(db_column='Set_', max_length=1, blank=True)
    ...
    class Meta:
        managed = False
        db_table = 'arter_to_referencer'

serializers.py

class SpeciesToReferencesSerializer(serializers.ModelSerializer):
    class Meta:
       model = SpeciesToReferences()
       id_field = 'species_id'
       fields = ['species_id', 'reference_id', 'reference', 'beset', ...]

views.py

class SpeciesToReferencesList(viewsets.ModelViewSet):
    queryset = SpeciesToReferences.objects.all()
    serializer_class = SpeciesToReferencesSerializer

我想要的只是直接在我们的API上调用SpeciesToReferences

$http.get('/api/speciestoreferences/'+$routeParams.artsnummer).success(function(data, status) {
    console.log(data);
});

其中$routeParams.artsnummer是486或任何其他值,或者只是像这样

http://localhost:8000/api/speciestoreferences/486/

它实际上似乎有效,如果我注入486它返回正确的结果数,5,依此类推。但它一直在抛出错误:

  

get()返回多个SpeciesToReferences - 它返回5!

我该如何避免?问题是species_id不是唯一的,我猜,但我只是希望所有出现species_id=X的地方。

已阅读django手册,谷歌搜索,阅读一些“类似”stackoverflow问题 - 但没有解决方案或解释真的帮助我。我认为应该可以定义类 - &gt;模型 - &gt;查看,以便它接受数据集的多个结果。我觉得我应该在SpeciesToReferencesList上设置某种过滤器,但无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:2)

您似乎正在使用django rest framework以及Django。您可能需要使用像ListAPIView这样的通用视图,而不是使用ViewSet。它可用于提供customer filters

Class SpeciesToReferencesList(ListAPIView):
  queryset = SpeciesToReferences.objects.all()
  serializer_class = SpeciesToReferencesSerializer

  def get_queryset(self):
    species_id = self.kwargs['species_id']
    return self.model.objects.filter(species_id=species_id)