如何根据id过滤

时间:2016-03-22 21:32:00

标签: python django

我想过滤包含countryId的状态数据。在我的models.py中

 class Country(models.Model):
    country_id=models.IntegerField(default=0)
    country=models.CharField(max_length=50)

    def __str__(self):
        return self.country

 class State(models.Model):
    state_id=models.IntegerField(default=0)
    state=models.CharField(max_length=50)
    countryid=models.ForeignKey(Country,default=1)

    def __str__(self):
        return self.state.encode('utf8')

我想得到列表os那些countryId等于变量的状态,这些变量通过url传递给我的views.py

class StateViewset(viewsets.ModelViewSet):
    queryset=State.objects.all()
    serializer_class=StateSerializers
    def list(self, request,*args):
        count_id=request.GET.get("id")
        data=State.objects.all()
        serializer=StateSerializers(data,many=True)
        state_data=State.objects.filter(countryid__country_id=count_id)
        return Response(serializer.data)

我的过滤器无法正常工作count_id是可变的,我在url.i中传递了那些属于那个国家的国家,这些国家有dountry id = count_id

4 个答案:

答案 0 :(得分:0)

试试这个:

...
state_data=State.objects.filter(countryId__countryId=count_id)
...

答案 1 :(得分:0)

尝试queryset=State.objects.get(id=count_id)

答案 2 :(得分:0)

你可以这样做:

state_data=State.objects.filter(countryId__countryId=count_id)

顺便说一下,您应该真正使用您的字段名称,模型countryId中的State应该是country,否则它与countryId中的Country字段名称相同{1}}模型。 python类字段也应该是带有下划线的小写字母,因此您可能需要country_id来改进代码样式。

答案 3 :(得分:0)

在不知道你的程序如何“不工作”的具体细节的情况下,我不能肯定地说出了什么问题,但我确实看到了一个问题。 编辑:现在知道你的代码返回所有状态而不是过滤列表,我想我看到了问题。仔细查看您的代码:

data=State.objects.all()
serializer=StateSerializers(data,many=True)
state_data=State.objects.filter(countryid__country_id=count_id)
return Response(serializer.data)

您将data初始化为所有状态,然后根据该数据创建序列化程序。然后,创建状态的筛选查询集,最后返回由第一组数据形成的响应。

换句话说,您实际上从未使用过滤后的查询集。

以下是否有效?

state_data = State.objects.filter(countryid__country_id=count_id)
serializer = StateSerializers(state_data, many=True)
return Response(serializer.data)