我正在移植一箇舊的Django Piston REST API來使用Django Rest Framework。我在Django 1.7(GeoDjango)工作。基本的django-rest-framework:如何開始寫視圖?
雖然我已經學習了教程和文檔,但我真的很努力去學習DRF。這感覺就像一個超級油輪 - 非常強大,但很難理解它是如何工作的!
我想做的事情應該很簡單。我有Django模型如下:
class County(models.Model):
id = models.CharField(max_length=3, unique=True, primary_key=True)
name = models.CharField(max_length=100)
class Place(models.Model):
id = models.IntegerField(primary_key=True)
county = models.ManyToManyField(County, related_name='places_in_county')
name = models.CharField(max_length=300)
location = models.PointField(null=True, blank=True)
objects = models.GeoManager()
而且我有一個現有的API調用像placesnear?lat=52.5&lng=1.0&radius=10
查詢。它是僅限GET的,可供任何人使用(不需要權限)。
從這個電話,我需要這樣的返回JSON:
[{
'id': 3725,
'county': {
'id': 7,
'name': 'Norfolk'
},
'name': 'Norwich'
}]
所以我在我的觀點嘗試這個文件:
@api_view(['GET'])
def places_near(request):
renderer_classes = (JSONRenderer,)
params = request.query_params
point = Point(params['lat'], params['lng'])
places = Place.objects.filter(location__dwithin=(point.location, D(km=params['radius'])))
return Response(places)
這在我的網址文件:
urlpatterns = [
url(r'^placesnear/$', views.places_near),
]
但這給了我一個AssertionError:Cannot apply DjangoModelPermissions on a view that does not have .model or .queryset property.
。
這可以連接到我的設置文件中的設置(我不知道這是否是正確的,我希望讓這個觀點是隻讀的,但提供給任何人):
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 100,
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
]
}
我該如何解決這個錯誤?而且,我的視圖文件中的方法甚至模糊不清?