在django中使用什么数据库模式与一对二通信?

时间:2016-10-13 18:34:44

标签: mysql django django-models

我知道OneToOneField进行一对一的通信,ForeignKey进行一对多的通信。

是否存在比ForeignKey更有效的方式来存储一对二的对应关系?

谢谢。

1 个答案:

答案 0 :(得分:1)

以下是两个OneToOneField键的示例:

from django.db import models

class Meaning(models.Model):
    definition = models.TextField(null=True)

class Word(models.Model):
    masculine_meaning = models.OneToOneField(Meaning, null=True, related_name='mword')
    feminine_meaning = models.OneToOneField(Meaning, null=True, related_name='fword')
    pronunciation = models.CharField(max_length=64, null=True, blank=True)

基于西班牙语的例子(我的意大利语是peggiore)

meaning1 = Meaning()
meaning1.meaning = 'Hand'
meaning1.save()
meaning2 = Meaning()
meaning2.meaning = 'Lever'
meaning2.save()
word1 = Word()
word1.pronunciation = 'braccio'
word1.masculine_meaning = meaning1
word1.feminine_meaning = meaning2
word1.save()

查询手

qs = Meaning.objects.filter(definition='Hand').select_related('mword', 'fword')
for x in qs:
    if x.mword: print x.mword.pronounciation
    if x.fword: print x.fword.pronounciation