繁体   English   中英

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

[英]Django default data (Fixtures?) in views.py on form.save()?

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

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

显然,我可以使用硬编码方法并编写10行Model.objects.create(...)并完成此操作,但是我想知道通过以下方法实现此功能的“正确” Django / pythonic方法是什么? JSON夹具文件等

如果您只关心创建一个id,则可以有一个模型,其中包含允许为null的字段和auto id字段。 其他字段也可以具有默认值。 默认字段选项还允许回调。 例如:-

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

查看: https : //docs.djangoproject.com/zh-CN/1.9/topics/db/models/#field-options

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

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

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

https://docs.djangoproject.com/zh-CN/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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM