gpt4 book ai didi

django - 将子对象的特定字段连接到父对象?

转载 作者:行者123 更新时间:2023-12-05 03:36:55 24 4
gpt4 key购买 nike

我有两个模型:

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()

Verse 上,我在 verse 字段中存储了一个段落。我如何查询所有子项 (Verse),获取他们的 verse 段落,将所有这些连接起来并将其放入 Chapter.chapter_content

例如

verses = Verse.objects.filter()[0:2]
for verse in verses:
print(verse.verse)

>> 'Lorem Ipsum.'
>> 'Second Lorem Ipsum Iteration 2.'

在父 Chapter 中,我希望 chapter_content 将两个值保存为一个长字符串:

'Lorem Ipsum。第二个 Lorem Ipsum 迭代 2.'

最佳答案

你可以这样做:

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()

但将经文存储在 Verse 对象中和存储在 Chapter 对象中是不好的做法,因为如果您只想更新一节经文怎么办?

您可以尝试使 chapter_content 成为 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()

请注意,您仍然需要按序号对经文进行排序。

关于django - 将子对象的特定字段连接到父对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69526164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com