Django-rest-framework: 提供一种避免循环导入序列化程序的方法

创建于 2020-06-18  ·  3评论  ·  资料来源: encode/django-rest-framework

这是一种常见的情况,您有两个模块相互引用。

例如,模块用户和帖子。 在用户上有用户,在帖子上有帖子和附件

# users
class UserSerializer:
    posts = PostSerializer()
    profile_attachments = AttachmentSerializer()


#posts
class PostSerializer:
    user = StringSerializer()
    attachments = AttachmentSerializer()

class AttachmentSerializer:
    name = CharField()
    size = IntegerField()

在 Django 中有一种声明外键的方法,可以避免循环依赖,通过字符串声明引用的模型:

profile_attachment = models.ForeignKey('posts.Attachment', on_delete=models.CASCADE)

DRF 可以为序列化程序提供类似的东西吗? 就像是

profile_attachment = ModelSerializer(serializer='posts.AttachmentSerializer')

所有3条评论

你好!

我设法通过在“循环”序列化程序之一中实现以下内容来实现相同的目的: DRF:反向关系
姜戈:跟随关系“向后”

虽然我确实认为它很复杂。

所以我实际上在我从事的一个项目中有同样的案例,但你真的不应该。 来自软件工程和架构课程的最佳实践是具有单向依赖性。 如果可能,至少。 如果两个应用程序之间存在非常紧密的耦合,它们可能应该是一个应用程序,或者它们应该有一个共同的父级。 如果适用,您还可以将序列化程序移动到子应用程序中。

我可能是错的,但 AFAIK 这是最佳实践。

我很惊讶这不会以无限循环结束。

此页面是否有帮助?
0 / 5 - 0 等级