如何安全地为对象提供模型中的下一个最高值 - Django

时间:2017-11-30 14:15:26

标签: python django django-models

我想为我的Django应用中创建的每个用户分配一个position参数。在该行的各个点修改位置,但是当创建用户时,我需要将position参数设置为下一个最高值。

模型如下:

from django.contrib.auth.models import User
from django.db import models

class Profile(models.Model):
    user = models.OneToOneField(User)
    position = models.PositiveIntegerField(null=False, default=0, unique=True)

目前我正在按如下方式分配此参数:

user_count = User.objects.all().count()
new_user = User()
new_user.profile.position = user_count + 1
new_user.save()

显然,如果两个用户同时注册,那么他们都有可能获得相同的user_count分配值,如果在保存之前发生的话。鉴于唯一性约束,这会引发错误,但我不确定如何安全地解决它。

我应该如何做到这一点以确保唯一性(并处理可能出现的任何独特冲突)?

1 个答案:

答案 0 :(得分:3)

我没有足够的评论意见,或者我会这样做。根据您选择的数据库,您可以只添加一个自动增量列,该列是在添加其他列时设置的。您还可以将该列设置为唯一,并在语句中使用try / except来捕获错误并增加您的位置。