我有此代码:
apples, oranges and pears
因此,我们的想法是仅在用户之前不喜欢餐厅的情况下创建一个新的LikedSlot,但我遇到了竞争问题,因为如果两个请求同时到达,则在第一行中会有两个请求if LikedSlot.objects.filter(restaurant__id=r.id, user__id=u.id).count() == 0:
l = LikedSlot.objects.create(restaurant=r, user=u)
时间。
我尝试了以下操作,但似乎也无法解决问题:
True
您有解决办法吗?
答案 0 :(得分:1)
在这种情况下,建议您使用数据库的参照完整性。更改您的模型,以使resturant + user对是唯一的:
class LikedSlot(models.Model):
...
class Meta:
unique_together = ('restaurant', 'user',)
这样,数据库将防止创建重复的记录。
进行此更改后,您还可以使用内置的get_or_create
函数来代替自己检查重复项:
liked_slot, created = LikedSlot.objects.get_or_create(restaurant=r, user=u)