Tengo dos modelos:
class Chapter(models.Model): chapter = models.IntegerField() verses_amount = models.IntegerField() chapter_content = models.TextField() class Verse(models.Model): chapter = models.ForeignKey(Chapter, on_delete=CASCADE) verse = models.TextField() verse_number = models.IntegerField() En Verse , almaceno un párrafo en el campo de verse . ¿Cómo puedo consultar a todos los niños ( Verse ), obtener su párrafo de verse , concatenar todos esos y poner eso en Chapter.chapter_content ?
P.ej
verses = Verse.objects.filter()[0:2] for verse in verses: print(verse.verse) >> 'Lorem Ipsum.' >> 'Second Lorem Ipsum Iteration 2.' En el Chapter principal, quiero que chapter_content contenga los dos valores como una cadena larga:
'Lorem Ipsum. Segunda iteración 2 de Lorem Ipsum.'
Podrías hacer algo como esto:
chapter = Chapter.objects.get(chapter=1) # or whatever chapter you want to get content = "" for verse in chapter.verse_set.all(): content += f"{verse.verse} " content = content.rstrip() chapter.chapter_content = content chapter.save() Pero es una mala práctica almacenar el verso tanto en los objetos Verse como en los objetos Chapter , porque ¿qué pasa si quieres actualizar solo un verso?
Podría intentar hacer que chapter_content una propiedad de método en el modelo Chapter .
class Chapter(models.Model): chapter = models.IntegerField() verses_amount = models.IntegerField() @property def chapter_content(self): content = "" for verse in self.verse_set.all(): content += f"{verse.verse} " return content.rstrip() class Verse(models.Model): chapter = models.ForeignKey(Chapter, on_delete=CASCADE) verse = models.TextField() verse_number = models.IntegerField()Tenga en cuenta que todavía tiene que ordenar los versículos por su número de orden.