我想过滤包含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
答案 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)