确保仅编写一次Django模型字段?原子能保证无锁



我正在寻找一种可靠的方式来确保在给定的Django模型的给定实例中,特定字段仅写一次。

代码应使用芹菜甚至RQ在视图或任务中运行。

我正在考虑使用以下片段:

from django.db import transaction
from django.utils.timezone import now
...
def perform_writeonce(object_pk):
    with transaction.atomic():
        instance = MyModel.objects.get(pk=object_pk)
        if instance.value is None:
            instance.value = 'Value written now : {}'.format(now())
            instance.save()

目的是仅当值才能写成一次,仅当其值不为无时。

您对这个片段充满信心,还是我错过的东西?

我正在使用多个枪支实例和芹菜工人使用单个PostgreSQL数据库服务器。

我试图不惜一切代价避免锁,因此任何使用应用程序锁的解决方案都不好。

感谢您的任何帮助。

我正在寻找一种可靠的方式来确保对于Django模型的任何给定实例,特定字段仅写一次。

预期的行为就像auto_now_add选项到datefields。

auto_now_add不能确保仅编写一次字段。如果您真的愿意,您仍然可以写入该字段。默认情况下,它在管理员表格等中没有显示。

您可以通过设置Field.editable对其他字段进行相同的操作https://docs.djangoproject.com/en/1.10/ref/models/fields/#Editable

field.edistibal

如果False,则该字段将不会显示在管理员或任何其他 ModelForm。在模型验证期间,它们也会跳过。默认为 True

相关内容

  • 没有找到相关文章

最新更新