我想为我的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
分配值,如果在保存之前发生的话。鉴于唯一性约束,这会引发错误,但我不确定如何安全地解决它。
我应该如何做到这一点以确保唯一性(并处理可能出现的任何独特冲突)?
答案 0 :(得分:3)
我没有足够的评论意见,或者我会这样做。根据您选择的数据库,您可以只添加一个自动增量列,该列是在添加其他列时设置的。您还可以将该列设置为唯一,并在语句中使用try / except来捕获错误并增加您的位置。