这是一种常见的情况,您有两个模块相互引用。
例如,模块用户和帖子。 在用户上有用户,在帖子上有帖子和附件
# 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')
所以我实际上在我从事的一个项目中有同样的案例,但你真的不应该。 来自软件工程和架构课程的最佳实践是具有单向依赖性。 如果可能,至少。 如果两个应用程序之间存在非常紧密的耦合,它们可能应该是一个应用程序,或者它们应该有一个共同的父级。 如果适用,您还可以将序列化程序移动到子应用程序中。
我可能是错的,但 AFAIK 这是最佳实践。
我很惊讶这不会以无限循环结束。