【发布时间】:2018-12-04 07:05:36
【问题描述】:
我正在使用 Django 休息框架 3.8.2。
我已阅读api-guide/filtering 并遵循DjangoFilterBackend 部分的给定示例。
models.py
class Pregunta(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=512, null=False)
descripcion = models.CharField(max_length=200, null=False)
categoria = models.ForeignKey(Pregunta_Categoria, on_delete=models.PROTECT)
tipoRespuesta = models.ForeignKey(TipoRespuesta, on_delete=models.PROTECT, related_name='fk_id_tipoRespuesta') #sacar el default
privated = models.BooleanField(default=False)
status = models.CharField(max_length=1, default='A')
created_by = models.ForeignKey(User, on_delete=models.PROTECT, related_name='proy_created_by8')
created_on = models.DateTimeField(default=timezone.now)
modified_by = models.ForeignKey(User, on_delete=models.PROTECT, related_name='proy_modified_by8')
modified_on = models.DateTimeField(blank=True, null=True)
class Meta:
permissions = (
('view_pregunta', 'View Pregunta'),
)
def __str__(self):
return "%s" % (self.name)
def __unicode__(self):
return u'%s' % (self.name)
views.py
class PreguntaViewSet(viewsets.ModelViewSet):
queryset = Pregunta.objects.filter(estado='A')
serializer_class = PreguntaSerializer
filter_backends = (DjangoFilterBackend,)
filter_fields = ('name', 'privated')
这是我的序列化器:
class PreguntaSerializer(serializers.ModelSerializer):
nom_tipoRespuesta = serializers.CharField(
source="tipoRespuesta.nombre", required=False, allow_blank=True)
class Meta:
model = Pregunta
fields = (
'id', 'name', 'descripcion', 'categoria', 'tipoRespuesta',
'created_by', 'created_on', 'modified_by', 'modified_on',
'status', 'privated', 'nom_tipoRespuesta',
)
urls.py
from django.conf.urls import url, include
from rest_framework import routers
from proy import views
router = routers.DefaultRouter()
router.register(r'questions', views.PreguntaViewSet)
router.register(r'questionCategories', views.PreguntaCategoriaViewSet)
router.register(r'projects', views.ProyectoViewSet)
router.register(r'polls', views.EncuestaViewSet)
router.register(r'questionnaire', views.CuestionarioViewSet)
router.register(r'pollByUser', views.EncuestaPorUsuarioViewSet)
router.register(r'answerType', views.TipoRespuestaViewSet)
router.register(r'answers', views.RespuestaViewSet)
router.register(r'answerByUser', views.RespuestaPorUsuarioViewSet)
router.register(r'variablesType', views.TipoVariableViewSet)
router.register(r'variablesCategory', views.CategoriaVariableViewSet)
router.register(r'variables', views.VariableViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
]
settings.py:
REST_FRAMEWORK = {
'DEFAULT_PARSER_CLASSES': (
'rest_framework.parsers.JSONParser',
),
'DEFAULT_PERMISSION_CLASSES': (
#'rest_framework.permissions.IsAuthenticated',
),
'EXCEPTION_HANDLER': 'adm.exceptions.core_exception_handler',
'NON_FIELD_ERRORS_KEY': 'error',
'DEFAULT_FILTER_BACKENDS': (
'django_filters.rest_framework.DjangoFilterBackend',
),
}
但是,当我尝试 url 时
http://example.com/api/questions?name=someName&privated=True
我收到错误Page not found (404)。
我做错了什么?
【问题讨论】:
-
您确定 URL 应该是
example.com/吗?您是否在该 URL 中有您的代码,或者您是否在本地hosts文件中设置了它?如果没有,你应该检查你的 Django 服务器在哪里监听(可能是127.0.0.1:8000)。 -
example.com/api/questions?name=someName&privated=True只是一个例子,真正的 url 是localhost:8000/api/v1/questions?name=someName&privated=True@Ralf -
其他 URL 是否有效?例如
http://localhost:8000/api/v1/questionCategories/或http://localhost:8000/api/v1/pools/?您是否在路径中包含正确的版本 (v1/)? -
@Ralf 是的,其他 URL 有效
标签: django filter django-rest-framework http-status-code-404