Django REST框架:如何定义嵌套的视图集并获得更明确的lookup_field名称



上下文

我有两个视图集,它们有自己的路由器来自动生成URL:

  • ModelAViewset
  • ModelB视图集

目前,只有ModelAViewset的详细信息可以通过以下URL访问:

{root_url}/model-a/<slug>

"<slug>"是ModelA的"段塞"字段,作为查找字段。

我正试图找到一种方法来构建一条通往ModelB视图集细节的路线,如下所示:{root_url}/model-a/<model_a_slug>/model-b/<model_b_pk>

问题

  1. 有没有一种方法可以根据模型名称动态地使用更明确的lookup_field值?像这样:{root_url}/model-a/<model_a_slug>

注意:为了在模型中保持简单,我宁愿将ModelA的"slug"字段名称保留为原样

  1. 基于视图集和路由器,是否有方法通过多查找字段访问ModelBViewset详细信息?使用类似的URL

    {root_url}/model-a/<model_a_slug>/model-b/<model_b_pk>

谢谢,提前

如果在模型上使用lookup_field,则对该字段的引用仅适用于定义了lookup_field的模型。

这样,要像{root_url}/model-a/<model_a_slug>/model-b/<model_b_pk>一样工作,您必须覆盖ModelBViewsetget_object函数或者您可以按照以下步骤操作。

引用slug字段的另一种方法是在模型本身中将其创建为primary_key,如下所示:

class ModelA(model.Model):
slug = models.SlugField(
max_length=60,
unique=True,
help_text="Define primary_key=true.",
blank=True,
primary_key=True
)

这样,每次引用此模型或其他模型中的对象({root_url}/model-a/<model_a_slug>/model-b/<model_b_pk>)时,都需要使用slug字段,而不是idid字段已不存在

相关内容

  • 没有找到相关文章

最新更新