我有以下2个表
在models.py中
class Foo(models.Model): uuid = models.CharField(_('UUID'), primary_key=True, default=uuid4)
和
class FooExt(models.Model): uuid = models.ForeignKey(Foo, verbose_name=_('UUID'), primary_key=True) time = models.DateTimeField(_('Create DateTime'), auto_now_add=True)
基本上,我有Foo
和FooExt
.我想要一对一的关系FooExt
.这就是为什么我将FooExt
主键设置为外键Foo
(不确定这是否正确).
现在我添加一个条目Foo
.是否FooExt
自动创建了一个条目?或者我需要手动添加这两个条目Foo
和FooExt
?
我有什么办法可以获得"自动"添加功能吗?从概念上讲,这两个表描述了同样的事情,但我只是不想污染Foo
额外的信息.因此,如果添加Foo
自动创建相应的,那就太棒了FooExt
.
如果您想要OneToOne关系,那么请使用models.OneToOneField
而不是models.ForeignKey
.使用外键你需要添加unique=True
你的ForeignKey:
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()