Django模型设计多对一?

Django模型设计多对一?,django,django-models,foreign-keys,one-to-many,many-to-one,Django,Django Models,Foreign Keys,One To Many,Many To One,我试图用Django创建两个模型,“段落”和“句子”。我似乎仍然不明白多对一函数是如何工作的。如果我想有一个段落包含多个句子;我是否只需在句子模型中添加一个外键(段落)?这样,我可以在段落模型中存储多个句子。 谢谢你在我学习Django的过程中给予我的启发 class Sentence(models.Model): text = models.TextField(blank=True) order_number = models.IntegerField(

我试图用Django创建两个模型,“段落”和“句子”。我似乎仍然不明白多对一函数是如何工作的。如果我想有一个段落包含多个句子;我是否只需在句子模型中添加一个外键(段落)?这样,我可以在段落模型中存储多个句子。 谢谢你在我学习Django的过程中给予我的启发

    class Sentence(models.Model):
        text = models.TextField(blank=True)
        order_number = models.IntegerField()
    
        def __str__(self):
            return self.text
    
    class Paragraph(models.Model):
        text = models.TextField(blank=True)
        order_number = models.IntegerField()
        sentences = models.ForeignKey(Sentence, on_delete=models.CASCADE)
    
        def __str__(self):
            return self.text

ForeignKey
是一种多对一关系。这意味着定义模型的多个项可以链接到目标模型的同一项

因此,
段落
因此是“父”模型,
句子
是“子”模型:

然后,您可以使用以下工具查询
p1
的所有相关句子:

p1.sentences.all()

p1.句子.all()
请出示您的模型是的,您走对了。一个段落可以有许多句子,但一个句子只能有一个段落。因此,这个句子的段落有一个外键。您可以通过执行
Para.statement\u set.all()
来检索段落的句子,其中
Para
是段落对象。
p1 = Paragraph.objects.create(text='Act 3, Scene 1', order_number=0)
s1 = Sentence.objects.create(
    text='To be, or not to be, that is the question',
    paragraph=p1,
    order_number=0
)
s2 = Sentence.objects.create(
    text='Whether 'tis nobler in the mind to suffer',
    paragraph=p1,
    order_number=1
)
p1.sentences.all()