我正在使用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问题 - 但没有解决方案或解释真的帮助我。我认为应该可以定义类 - >模型 - >查看,以便它接受数据集的多个结果。我觉得我应该在SpeciesToReferencesList
上设置某种过滤器,但无法弄清楚如何做到这一点。
答案 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)