gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:44 24 4
gpt4 key购买 nike

我想在我的序列化程序中使用 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/

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