Django-rest-framework: ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ способ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ цикличСского ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° сСриализаторов

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 18 июн. 2020  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: encode/django-rest-framework

Π­Ρ‚ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ случай, ΠΊΠΎΠ³Π΄Π° Ρƒ вас Π΅ΡΡ‚ΡŒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ±Π° ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°.

НапримСр, ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ сообщСний. Для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Ρƒ вас Π΅ΡΡ‚ΡŒ User, Π° для сообщСний Ρƒ вас Π΅ΡΡ‚ΡŒ Post ΠΈ Attachment.

# 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: ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ
Django: слСдованиС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌ Β«Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈΒ»

Π₯отя я Π΄ΡƒΠΌΠ°ΡŽ, Ρ‡Ρ‚ΠΎ это довольно слоТно.

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρƒ мСня Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ случай Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ я Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ, Π½ΠΎ Π²Π°ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ. Π›ΡƒΡ‡ΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° ΠΈΠ· курса ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΉ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΈΠΈ ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ - ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŽΡŽ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ. Если Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅. Если ΠΌΠ΅ΠΆΠ΄Ρƒ двумя прилоТСниями сущСствуСт ΠΎΡ‡Π΅Π½ΡŒ тСсная связь, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΎΠ½ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π³ΠΎ родитСля. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ свой сСриализатор Π²ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ссли это ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ.

Π― ΠΌΠΎΠ³Ρƒ ΠΎΡˆΠΈΠ±Π°Ρ‚ΡŒΡΡ, Π½ΠΎ, насколько ΠΌΠ½Π΅ извСстно, это Π»ΡƒΡ‡ΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°.

Π― ΡƒΠ΄ΠΈΠ²Π»Π΅Π½, Ρ‡Ρ‚ΠΎ это Π½Π΅ заканчиваСтся бСсконСчным Ρ†ΠΈΠΊΠ»ΠΎΠΌ.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ