如何让 Django 帖子接受 str 而不是 pk

问题描述

我有关系数据库和要在其中发布的文件信息。 DB在某些属性中提供了3个持有ForeignKey的实体。

实体是:

文件、工作文件和工作文件阶段

我的问题是,当我发布特定文件的信息时,我必须在这些端点上发布,但例如WorkFile 拥有属性 file = ForeignKey(File) - 这是一个 id 归档。这使我 POST 所有文件数据,然后 GET 用于获取 ID,然后使用这些 ID 在 WorkFile 上发布。

这是很多 POSTINGGETINGITEratingANDPROMISING(因为我的请求是在 react 上使用 axios 完成的)。

我尝试过的是仅带有 file=file_name 的 POST 数据构造对象,然后在 Django 端和 serialize.save()数据库搜索它。但是对于外键,POST 需要 pk 而不是 str。

通过这个过程,我最终得到了:

axios.post().then(axios.get().then(axios.post(then))))

是否有任何简单/良好的实践方法

解决方法

Django 的 POST 视图可以接受任何你想要的。至于通过相关模型属性查询您的模型,请查看官方文档:https://docs.djangoproject.com/en/3.1/topics/db/queries/#lookups-that-span-relationships

在你的情况下,它应该是这样的:

def my_post_view(request,file_name):
    try:
        work_file = WorkFile.objects.get(file__name=file_name)
    except WorkFile.DoesNotExist:
        raise Http404
    ...

其中 file_name 作为端点 URL 的一部分传递。