![](/img/trans.png)
[英]Django Token objects update error : django.db.utils.IntegrityError: UNIQUE constraint failed: authtoken_token.user_id
[英]How to update a list of objects in Django with a unique constraint?
我正在尝试更新具有唯一约束的对象列表,但引发了异常。 是否可以使用Django ORM延迟约束?
这是我尝试过的:
class Episode(models.Model):
issue_date = models.DateTimeField(db_index=True, unique=True)
...
def rearrange_episodes(cls, programme, after):
next_episodes = Episode.objects.filter(programme=programme, issue_date__gte=after).order_by('issue_date')
for episode in next_episodes:
episode.issue_date = get_next_date()
episode.save() #Crash -> Duplicate entry
如果get_next_date()
返回的日期已经存在,则您有一个无法解决的问题。
我假设您想将日期沿“每一集”移动,即
episode[0].issue_date --> episode[1].issue_date
episode[1].issue_date --> episode[2].issue_date
episode[2].issue_date --> new date
...您已尝试执行上述操作,但第一步失败,因为episode[1].issue_date
已经存在。
为了解决这个问题,您只需要以相反的顺序进行迭代即可:
episode[2].issue_date --> new date
episode[1].issue_date --> previous episode[2].issue_date
episode[0].issue_date --> previous episode[1].issue_date
假设您的get_next_date()
函数在这种情况下可以工作,您只需将代码更改为:
def rearrange_episodes(cls, programme, after):
next_episodes = Episode.objects.filter(programme=programme, issue_date__gte=after).order_by('-issue_date')
for episode in next_episodes:
episode.issue_date = get_next_date()
episode.save()
此解决方案对我的问题无效,因为重新排列不是线性的。
例如:
episode[4].issue_date --> new date
episode[3].issue_date --> previous episode[4].issue_date
episode[2].issue_date --> not change
episode[1].issue_date --> previous episode[0].issue_date
episode[0].issue_date --> new date
我只看到两种简单的方法来解决问题,删除约束或使用bulk_create删除并创建对象
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.