gpt4 book ai didi

python - 如何使用 Django 和 rest_framework 通过 url 中的外键检索对象

转载 作者:行者123 更新时间:2023-11-28 17:45:43 27 4
gpt4 key购买 nike

假设我正在使用两个简单模型:

class Location(models.Model):
location_name = models.CharField(max_length=100)
country = models.ForeignKey("Country")

class Country(models.Model):
country_name = models.CharField(max_length=100)

为了通过主键检索对象,我定义了这样的 View 和 url (related to my resolved question):

url(r'^location/(?P<pk>[0-9]+)/$', views.LocationDetailAPIView.as_view(), name='location-detail'),
url(r'^country/(?P<pk>[0-9]+)/$', views.CountryDetailAPIView.as_view(), name='country-detail')

现在我想定义一个新 View ,它返回一个国家/地区所有位置/城市的列表。我的想法是使用以下 url 定义(或类似的)。

url(r'^location-by-country/(?P<country_pk>[0-9]+)/$', views.LocationByCountryListAPIView.as_view(), name='location-by-country-detail')

我一直在寻找答案,但可能我没有使用正确的关键字。我将如何实现我的观点以使用 url 中的外键?我可以使用过滤器按 country_pk 过滤位置吗?

编辑:这是我想出的,但我不知道如何过滤外键:

class LocationByCountryIdAPIView(generics.GenericAPIView):        
def get(self, request, country_pk):
locations = Location.objects.all() # .filter(???)
location_list = list()
for location in locations:
# now I would do something similar to this
# or use a filter on locations instead of creating location_list
# and appending locations to it
if location.country.pk == country_pk:
location_list.append(location)

location_serializer = LocationSerializer(location_list, many=True)
# or location_serializer = LocationSerializer(locations, many=True) when using filter

return Response({
'locations': location_serializer.data
})

最好的问候,迈克尔

最佳答案

好的,现在我自己运行了。事情是这样的:

class LocationByCountryListAPIView(generics.ListAPIView):
def get(self, request, country_pk):
# get the country by its primary key from the url
country = Country.objects.get(pk=country_pk)

locations = Location.objects.filter(country=country)
location_serializer = LocationSerializer(locations, many=True)

return Response({
'locations': location_serializer.data
})

我正在使用上面提到的 url 定义:

url(r'^location-by-country/(?P<country_pk>[0-9]+)/$', views.LocationByCountryListAPIView.as_view(), name='location-by-country-detail')

无论如何,我不确定这个解决方案是否是最好的方法。如果有任何关于如何改进我的解决方案的建议,我将不胜感激。

最好的问候,迈克尔

关于python - 如何使用 Django 和 rest_framework 通过 url 中的外键检索对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18530740/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com