python - ViewSets 是否在 Django Rest Framework 中生成 view_names?

标签 python django django-rest-framework

我想在我的序列化程序中使用 HyperlinkedIdentityField,这就是我需要 View 名称的原因。例如,如果我需要 model_name-list,如何获取 View 名称?

这是我的序列化器:

class CategorySerializer(serializers.HyperlinkedModelSerializer):
posts = serializers.HyperlinkedIdentityField(view_name='', format=None)
class Meta:
    model = Category
    fields = ('url', 'category_name', 'id', 'parent', 'posts')

这是我的views.py:

class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer

这是我的 urls.py:

router = routers.DefaultRouter()
router.register(r'categories', views.CategoryViewSet)
router.register(r'posts', views.PostViewSet)


urlpatterns = [
    url(r'^', include(router.urls)),
]

我的模型:

class Post(models.Model):
    post_name = models.CharField(max_length=50)
    post_text = models.CharField(max_length=1000)
    pub_date = models.DateTimeField('date published')
    categories = models.ManyToManyField('Category', related_name='posts')
    def __str__(self):
        return self.post_name

class Category(models.Model):
    category_name = models.CharField(max_length=50)
    parent = models.ForeignKey('self', null=True, blank=True, on_delete = models.CASCADE)
    def __str__(self):
    return self.category_name

我需要一个 view_name 用于 post-list,以便使用 HyperlinkedIdentityField

最佳答案

正如 DRF 中路由器的文档 (http://www.django-rest-framework.org/api-guide/routers/) 所说,如果在注册 ViewSet 时未传递 base_name 参数,则将根据定义路由器时注册的 ViewSet 的查询集属性自动生成 view_name。

在您的情况下,对于 ListView ,view_name 应该是“post-list”,对于 View 集的详细 View ,view_name 应该是“post-detail”,除非您想通过将它作为第三个参数传递给路由器来更改/覆盖它。注册()。

另请注意,如果您没有为 ViewSet 初始化 base_name,则 queryset 属性应始终存在,否则会引发错误。

关于python - ViewSets 是否在 Django Rest Framework 中生成 view_names?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48400693/

相关文章:

python - 每当我的 MySQL 数据库发生变化(插入)时,是否可以向我的 python 应用程序发送实时通知?

python - Opencv 3.0 - 模块对象没有属性 'xfeatures2d'

django - 当我点击/swagger url 时得到 "AssertionError: duplicate Parameters found"

Django-Rest-Framework 路由器寄存器

python - 将具有坐标和值的字典转换为二维数组

python - 作业不是由 APScheduler 的 BackgroundScheduler 执行的

django - Django 中的全局 formfield_overriding

python - Django 提供动态文件

Django 休息框架 : Set Permissions for function view

python - 为什么我不能让Python设置不同?