Django-rest-framework: Berikan cara untuk menghindari impor serializer secara melingkar

Dibuat pada 18 Jun 2020  ·  3Komentar  ·  Sumber: encode/django-rest-framework

Ini adalah kasus umum di mana Anda memiliki modul di mana keduanya saling merujuk.

Misalnya, modul pengguna dan posting. Pada pengguna Anda memiliki Pengguna dan pada posting Anda memiliki Postingan dan Lampiran

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


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

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

Di Django ada cara untuk mendeklarasikan Kunci Asing yang menghindari ketergantungan melingkar, mendeklarasikan model yang direferensikan dengan sebuah string:

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

Bisakah DRF menawarkan sesuatu seperti itu untuk serializer? Sesuatu seperti

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

Semua 3 komentar

Hai mrodal!

Saya berhasil mencapai hal yang sama dengan menerapkan yang berikut di salah satu serializer "melingkar": DRF: Hubungan terbalik
Django: Mengikuti hubungan “mundur”

Meskipun menurut saya itu cukup rumit.

Jadi saya sebenarnya memiliki kasus yang sama dalam proyek yang saya kerjakan, tetapi Anda seharusnya tidak melakukannya. praktik terbaik, dari kursus rekayasa perangkat lunak dan arsitektur adalah memiliki ketergantungan satu arah. Jika mungkin setidaknya. Jika ada hubungan yang sangat dekat antara dua aplikasi, mereka mungkin harus menjadi satu aplikasi, atau mereka harus memiliki induk yang sama. Anda juga dapat memindahkan serializer Anda ke dalam sub-aplikasi jika berlaku.

Saya mungkin salah, tetapi AFAIK itu adalah praktik terbaik.

Saya terkejut ini tidak berakhir di infinite loop.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat