我有以下2张表
在 models.py 中
class Foo(models.Model):
uuid = models.CharField(_('UUID'), primary_key=True, default=uuid4)
and
class FooExt(models.Model):
uuid = models.ForeignKey(Foo, verbose_name=_('UUID'), primary_key=True)
time = models.DateTimeField(_('Create DateTime'), auto_now_add=True)
基本上,我有Foo
and FooExt
。我想要之间存在一对一的关系FooExt
。这就是为什么我设置FooExt
的主键将成为外键Foo
(不确定这是否是正确的做法)。
现在我添加一个条目Foo
。是否有条目FooExt
自动创建?或者我是否需要手动添加一个条目Foo
and FooExt
?
我可以做些什么来获得“自动”添加功能吗?从概念上讲,这两个表描述了同一件事,但我只是不想污染Foo
有额外的信息。所以如果添加到Foo
自动创建对应的FooExt
.
- 如果您想要 OneToOne 关系,请使用
models.OneToOneField
代替models.ForeignKey
。使用外键,您需要添加unique=True
在你的外键中:
class Foo(models.Model):
uuid = models.CharField(_('UUID'), primary_key=True, default=uuid4)
class FooExt(models.Model):
uuid = models.OneToOneField(Foo, verbose_name=_('UUID'), primary_key=True)
time = models.DateTimeField(_('Create DateTime'), auto_now_add=True)
不,当您创建 Foo 实例时,不会创建 FooExt 的条目,您需要手动向 Foo 和 FooExt 添加条目。想想地点和餐馆,很多地方都可以是餐馆,但并不是所有的地方都是餐馆。
如果您喜欢里面的自动添加功能Foo
创造了一个FooExt
实例,那么你可以重载save
里面的方法Foo
创建和保存FooExt
实例也是这样的:
class Foo(models.Model):
....
....
def save(self, *args, **kwargs):
super(Foo, self).save(*args, **kwargs)
foo_ext = FooExt()
foo_ext.uuid = self
foo_ext.save()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)