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件

こんにちはmrodal!

「循環」シリアライザーの1つに以下を実装することで、同じことを達成することができました
Django:「後方」の関係に従う

かなり複雑だと思いますが。

ですから、私が取り組んでいるプロジェクトでも実際に同じケースがありますが、実際にはそうすべきではありません。 ソフトウェアエンジニアリングとアーキテクチャのコースからのベストプラクティスは、一方向の依存関係を持つことです。 可能であれば少なくとも。 2つのアプリの間に非常に密接な関係がある場合は、1つのアプリであるか、共通の親を持つ必要があります。 必要に応じて、シリアライザーをサブアプリに移動することもできます。

私は間違っているかもしれませんが、それがベストプラクティスであるAFAIKです。

これが無限ループにならないことに驚いています。

このページは役に立ちましたか?
0 / 5 - 0 評価