我正在寻找一种可靠的方式来确保在给定的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
。