我知道OneToOneField
进行一对一的通信,ForeignKey
进行一对多的通信。
是否存在比ForeignKey
更有效的方式来存储一对二的对应关系?
谢谢。
答案 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