Django-rest-framework: توفير طريقة لتجنب الاستيراد الدائري للمسلسلات

تم إنشاؤها على ١٨ يونيو ٢٠٢٠  ·  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!

تمكنت من تحقيق ذلك من خلال تنفيذ ما يلي في أحد المسلسلات "الدائرية": DRF: العلاقات العكسية
Django: متابعة العلاقات "إلى الوراء"

على الرغم من أنني أعتقد أنه معقد للغاية.

إذن لدي نفس الحالة في مشروع أعمل عليه ، لكن لا ينبغي عليك فعل ذلك. أفضل ممارسة ، من دورة هندسة البرمجيات والهندسة المعمارية هي أن يكون لديك تبعية في اتجاه واحد. إذا كان ذلك ممكنا على الأقل. إذا كان هناك اقتران وثيق جدًا بين التطبيقين ، فمن المحتمل أن يكونا تطبيقًا واحدًا ، أو بدلاً من ذلك يجب أن يكون لهما أحد الوالدين المشتركين. يمكنك أيضًا نقل جهاز التسلسل الخاص بك إلى تطبيق فرعي إذا كان ذلك ممكنًا.

قد أكون مخطئا ، ولكن AFAIK هذا هو أفضل ممارسة.

أنا مندهش من أن هذا لا ينتهي في حلقة لا نهائية.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات