class Timeline(models.Model):
name = models.CharField(blank=False, max_length=256)
# ...
class User(models.Model):
main_timeline = models.OneToOneField('Timeline', related_name='holder_user', null=False)
# ...
创建用户时,我希望自动创建新的时间轴并将其分配到main_timeline
字段。
到目前为止,我所拥有的最佳解决方案是不直接使用User.objects.create()
,而是将其包装到另一种方法中。
还有其他解决方案吗?
答案 0 :(得分:0)
覆盖save
模型上的User
方法:https://docs.djangoproject.com/en/1.10/ref/models/instances/#saving-objects
否则,请使用pre_save
信号:
https://docs.djangoproject.com/en/1.10/ref/signals/#django.db.models.signals.pre_save
示例:
from django.db.models.signals import pre_save
from django.dispatch import receiver
@receiver(pre_save)
def create_timeline_for_user(sender, instance, *args, **kwargs):
if instance.pk is None:
timeline = Timeline.objects.create(name='whatever')
instance.timeline = timeline
return instance
您可以在save
方法本身中使用非常相似的模式(检查pk,如果不存在,则创建时间轴并将其关联)。
注意:这里的正确术语是正在创建“实例”,而不是模型。