上下文
我有两个视图集,它们有自己的路由器来自动生成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>
问题
- 有没有一种方法可以根据模型名称动态地使用更明确的lookup_field值?像这样:
{root_url}/model-a/<model_a_slug>
注意:为了在模型中保持简单,我宁愿将ModelA的"slug"字段名称保留为原样
-
基于视图集和路由器,是否有方法通过多查找字段访问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>
一样工作,您必须覆盖ModelBViewset
get_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
字段,而不是id
id
字段已不存在