在form.save()上的views.py中的Django默认数据(Fixtures?)?

时间:2016-04-02 18:15:05

标签: python mysql json django

想知道Django在每次使用form.save()创建新帐户时插入一些默认数据库数据的最佳方法。

让我们说用户刚刚创建了一个新的商家资料帐户,我想在form.save()之后预先加载使用新商家ID和今天日期自定义的数据(因此我有新帐户ID)可用)。

显然,我可以使用硬编码方法编写10行Model.objects.create(...)并完成它但我想知道通过像JSON fixture这样的“正确”Django / pythonic方式是什么档案等。

2 个答案:

答案 0 :(得分:1)

如果您的关注点只是创建一个id,那么您可以拥有一个包含null允许字段和自动id字段的模型。其他字段也可以具有默认值。 default field选项也允许回调。 例如: -

created_at = models.DateTimeField(default=datetime.now)

请注意:https://docs.djangoproject.com/en/1.9/topics/db/models/#field-options

具有所有可空字段或默认值字段的模型基本上可以使用form.save()中的单行代码创建。假设您打算仅创建一个默认模型对象。

至于正确的方法,您可能希望在模型和正确的关系(FK)中使用简单的标记(将业务配置文件记录为活动状态,使默认的非活动状态等),以便用户无法重复创建默认业务轮廓。

答案 1 :(得分:0)

您可以使用django post_save信号。它易于使用。

https://docs.djangoproject.com/en/1.9/ref/signals/#django.db.models.signals.post_save

您可以将代码放在该应用程序本身的models.py中。

@receiver(post_save,sender=ModelName)
def do_some_operation(sender, **kwargs):
    if kwargs['created']:                 # Executes only if created 
        obj = kwargs['instance']
        # do modifications with your obj
        obj.save()