Python 努力让django_注释与django REST框架一起工作

Python 努力让django_注释与django REST框架一起工作,python,django,serialization,django-rest-framework,django-comments,Python,Django,Serialization,Django Rest Framework,Django Comments,我第一次在一个项目中使用Django REST框架,我正在为一个特定的部分而挣扎。该项目是一个问题跟踪型应用程序,它使用django_comments对问题进行评论。我现在正在其上构建一个API,以允许创建一个移动应用程序 我创建了以下序列化程序: from django.contrib.auth.models import User from todolist.models import Project, Issue from rest_framework import serializers

我第一次在一个项目中使用Django REST框架,我正在为一个特定的部分而挣扎。该项目是一个问题跟踪型应用程序,它使用
django_comments
对问题进行评论。我现在正在其上构建一个API,以允许创建一个移动应用程序

我创建了以下序列化程序:

from django.contrib.auth.models import User
from todolist.models import Project, Issue
from rest_framework import serializers
from django_comments.models import Comment

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('id', 'email', 'first_name', 'last_name')


class ProjectSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Project
        fields = ('name', 'description', 'owner')


class CommentSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Comment


class IssueSerializer(serializers.HyperlinkedModelSerializer):
    comments = CommentSerializer(many=True)

    class Meta:
        model = Issue
下面是我的项目范围
url.py
,我在其中定义了路由:

from django.conf.urls import patterns, include, url 
from todolist.views import HomeTemplateView, UserViewSet, ProjectViewSet, IssueViewSet, CommentViewSet
from rest_framework import routers
from rest_framework.authtoken.views import obtain_auth_token

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
router.register(r'projects', ProjectViewSet)
router.register(r'issues', IssueViewSet)
router.register(r'comments', CommentViewSet)

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'projectile.views.home', name='home'),
    # url(r'^projectile/', include('projectile.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),

    # Comments
    (r'^comments/', include('django_comments.urls')),

    # Login
    url(r'^accounts/login/$', 'django.contrib.auth.views.login'),

    # Logout
    url(r'^accounts/logout/$', 'django.contrib.auth.views.logout_then_login', {'login_url': '/accounts/login/'}),

    # To-do list
    url(r'^projects/', include('todolist.urls')),

    # Home page
    url(r'^$', HomeTemplateView.as_view(
        template_name="todolist/home.html",
        )), 

    # Router URLs
    url(r'^api/', include(router.urls)),

    # REST framework auth URLs
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    url(r'^api-token-auth/', obtain_auth_token),

    # API docs
    url(r'^docs/', include('rest_framework_swagger.urls'))
)
当我运行试图获取所有注释的测试时,我看到以下错误:

ImproperlyConfigured: Could not resolve URL for hyperlinked relationship using view name "contenttype-detail". You may have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.
另外,当我获取一个问题时,它不包括评论


现在,在我看来,这个错误是在获取注释时,它无法将注释与其父项匹配。我已经,但我不确定如何使用DRF解决它。

在您的
注释
序列化程序中,明确指定注释实例字段,并排除字段
内容类型

class CommentSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Comment
        fields = ('field_1','field_2','field_3') #here goes your comment fields and dont include contenttype field

问题是DRF将尝试应用超链接来表示所有关系,而对于
contenttype
字段,您没有视图或序列化程序,也不需要它

你能发布你的URL.py文件吗?你有一个名为
contenttype
的序列化程序吗?@levi No.
django_comments
是旧的django注释系统,从1.6开始被移动到一个单独的应用程序。它是使用Django contenttypes框架构建的。contenttype字段是contenttypes框架中contenttype模型的外键。请检查我的答案,您需要排除contenttype字段。