【问题标题】:One-To-Many Relationship Django一对多关系 Django
【发布时间】:2020-03-11 17:08:56
【问题描述】:

我正在使用 Django 编写字典。 如有必要,我希望一个词有多个定义。 这将是一对多的关系,但 Django 似乎没有OneToManyField

这是我的代码的 sn-p:

class Definition(models.Model):
    definition = models.CharField(max_length=64)

class Word(models.Model):
    word = models.CharField(max_length=64, unique=True)
    definitions = models.ForeignKey(Definition, on_delete=models.CASCADE, related_name="word")

我想做word.definitions 并取回该词的所有定义。 此外,删除一个词应该删除该词的所有定义。最后,a_definition.word 应该给我与该定义相关的词。

【问题讨论】:

    标签: python django one-to-many


    【解决方案1】:

    您必须在 Definition 类中使用 ForeignKeyDefinition 将与Word 有关系:

    from django.db import models
    
    class Definition(models.Model):
        definition = models.CharField(max_length=64)
        word = models.ForeignKey(Word, on_delete=models.CASCADE)
    
    class Word(models.Model):
        word = models.CharField(max_length=64, unique=True)
    

    你可以这样查询它:

    from .models import Word, Definition
    
    word = Word.objects.get(word = 'test')   #get Word object
    definitions = Definition.objects.filter(word = word)   #get all Definition objects related to word object above
    
    for definition in definitions:   #print all definitions related to word
        print('%s -> %s' % (word.word, definition.definition))
    

    【讨论】:

    • 对于这种情况,related_name 字段选项是否有用?
    • @FredPercudani 我在 reddit 上找到了这个答案,这似乎很有用:reddit.com/r/django/comments/76a7uw/related_name_in_modelspy 据我了解,您可以致电 word.definition_set.all() 以通过给定的单词对象获取所有定义,但我没有看到很大的优势将related_name 更改为不同的东西。
    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 2018-08-28
    • 2013-04-06
    • 1970-01-01
    • 2011-06-22
    • 2017-07-16
    相关资源
    最近更新 更多