Django:如何修改正在创建的模型?

时间:2017-04-04 22:39:47

标签: django django-models model

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(),而是将其包装到另一种方法中。

还有其他解决方案吗?

1 个答案:

答案 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,如果不存在,则创建时间轴并将其关联)。

注意:这里的正确术语是正在创建“实例”,而不是模型。