use*_*688 2 sql django django-models
我有以下2个表
在models.py中
class Foo(models.Model):
uuid = models.CharField(_('UUID'), primary_key=True, default=uuid4)
Run Code Online (Sandbox Code Playgroud)
和
class FooExt(models.Model):
uuid = models.ForeignKey(Foo, verbose_name=_('UUID'), primary_key=True)
time = models.DateTimeField(_('Create DateTime'), auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)
基本上,我有Foo和FooExt.我想要一对一的关系FooExt.这就是为什么我将FooExt主键设置为外键Foo(不确定这是否正确).
现在我添加一个条目Foo.是否FooExt自动创建了一个条目?或者我需要手动添加这两个条目Foo和FooExt?
我有什么办法可以获得"自动"添加功能吗?从概念上讲,这两个表描述了同样的事情,但我只是不想污染Foo额外的信息.因此,如果添加Foo自动创建相应的,那就太棒了FooExt.
models.OneToOneField而不是models.ForeignKey.使用外键你需要添加unique=True你的ForeignKey:Run Code Online (Sandbox Code Playgroud)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方法,如下所示:FooFooExt
Run Code Online (Sandbox Code Playgroud)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()
看看 django-annoying 中的 AutoOneToOneField
https://github.com/skorokithakis/django-annoying
或者回答这个问题:Django可以自动创建相关的一对一模型吗?
| 归档时间: |
|
| 查看次数: |
10049 次 |
| 最近记录: |