我有一个模范国家和一个在某一年去一个国家度假的模范人物。我想有一个国家的Api,在其中我可以过滤的国家,只有某些人在某一年度假。在
在模型.py在
from django.db import models
class Country(models.Model):
id = models.CharField(max_length=50,primary_key=True)
country = models.CharField(max_length=255,null=True)
class PersonYear(models.Model):
id = models.IntegerField(primary_key=True)
person = models.CharField(max_length=255,null=True)
year = models.IntegerField(null=True)
country = models.ForeignKey(Country, related_name='personyears')
示范国目录
^{pr2}$模特儿服装内容
id|person|year|country_id
1|John|2014|1
2|John|2015|1
3|Mary|2014|1
在序列化程序.py在
from apiapp.models import PersonYear,Country
from rest_framework import serializers
class PersonyearSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = PersonYear
fields = ('id','person','year')
class CountrySerializer(serializers.HyperlinkedModelSerializer):
personyears = PersonyearSerializer(many=True)
class Meta:
model = Country
fields = ('id','country','personyears')
在视图.py在
import rest_framework_filters as filters
class PersonyearFilter(filters.FilterSet):
id = filters.AllLookupsFilter(name='id')
person = filters.AllLookupsFilter(name='person')
year = filters.AllLookupsFilter(name='year')
class Meta:
model = PersonYear
class PersonyearViewSet(viewsets.ModelViewSet):
queryset = PersonYear.objects.all()
serializer_class = PersonyearSerializer
filter_backends = (filters.backends.DjangoFilterBackend,)
filter_fields = ['id','person','year']
filter_class = PersonyearFilter
class CountryFilter(filters.FilterSet):
id = filters.AllLookupsFilter(name='id')
nm = filters.AllLookupsFilter(name='country')
personyears = filters.RelatedFilter(PersonyearFilter,name='personyears')
class Meta:
model = Country
class CountryViewSet(viewsets.ModelViewSet):
queryset = Country.objects.all()
serializer_class = CountrySerializer
filter_backends = (filters.backends.DjangoFilterBackend,)
filter_fields = ['id','country','personyears']
filter_class = CountryFilter
我想从2014年约翰度假的所有国家中选出:
http://localhost:8000/country/?personyears__person=John&personyears__year=2014
我希望得到一张唱片:
{"id": "1", "country": "France",
"personyears": [
{ "id": 1,
"person": "John"
"year": 2014
}
]
}
但是我把这张唱片重复了4次。你能解释一下我做错了什么,怎么得到我想要的吗。在
更新1:
我不想在2014年给约翰一个特别的解决方案。我想要一个解决任何人在任何一年的所有实例。例如,我还希望下面的过滤器给出一个结果: http://localhost:8001/api/country/?personyears__person=Mary&personyears__year=2014
更新2:
我试着替换:
queryset = Country.objects.all()
签署人:
queryset = Country.objects.all().distinct()
它有助于获得预期(1个记录)的结果:
在本地主机:8000/国家/地区/?personyears_uuperson=John&;personyears_yuyear=2014年
但我现在得到了person='Mary'/year='2015'的意外/意外结果
在本地主机:8000/国家/地区/?personyears_uperson=Mary&personyears_uuyear=2015年
我没想到会有结果(玛丽2015年没有去任何国家度假)。但我有
{"id": "1","country": "France",
"personyears": [
{
"id": 1,
"person": "John",
"year": 2014
},
{
"id": 2,
"person": "John",
"year": 2015
},
{
"id": 3,
"person": "Mary",
"year": 2014
}
]
}
您的
queryset
应该是:这将返回所有国家的列表。在
注意:这将根据不同用户的姓名进行过滤。应该还有一个模型
Person
,它的foreign key
应该映射到PersonYear
。在相关问题 更多 >
编程相关推荐