2016-11-08 123 views
0

1.模型的名称是UserRecord。
2.Below是我认为的代码。Django模型创建数据副本

@login_required 
def data(request, page, keyword,strEncode): 
    current_username = request.user.username 
    data_s = dosomething() #It takes a long time!!! 
    UserRecord.objects.get_or_create(user=User.objects.get(username=current_username),MyRecords=keyword) # in order to create unique value 
    # or use below method 
    # if not UserRecord.objects.filter(user=User.objects.get(username=current_username),MyRecords=keyword): 
     # UserRecord.objects.create(user=User.objects.get(username=current_username),MyRecords=keyword) 
    return JsonResponse(data_s, safe=False) 

请求下面的URL几次没有间隔,像并发线程。
http://127.0.0.1:8000/data/1/test/english/
完成此操作后,MyRecords列会填入重复值。
我在Django文档中发现了一些使用'with transaction.atomic'来处理这个问题的方法,但它不起作用。

+0

用户= models.ForeignKey(用户) – blueboy

回答

0

Mysql的

class UserRecord(models.Model): 
    user = models.ForeignKey(User) 
    MyRecords = models.CharField(max_length=128) 
    class Meta: 
     unique_together = (("user", "MyRecords"),) #mutil column uique idex 
    def __unicode__(self): 
     return self.user.username 
1

你不需要通过User.objects.get(用户= User.objects.get(用户名= current_username)) 而是使用request.user了相同的获取用户。

@login_required 
def data(request, page, keyword,strEncode): 
    current_user = request.user 
    data_s = dosomething() 
    UserRecord.objects.get_or_create(user=current_user,MyRecords=keyword) # in order to create unique value 
    return JsonResponse(data_s, safe=False) 

而且MyRecords =关键字将创造一个新的记录每一个新的关键字在高清数据传递查看时间,因此,请检查您的代码。

+0

类UserRecord(models.Model): 用户= models.ForeignKey(用户) MyRecords = models.CharField(MAX_LENGTH = 128) def __unicode __(self): return self.user.username blueboy

+0

@blueboy仔细阅读你的代码。问题出在你没有分享的代码中。 –

+0

user = models.ForeignKey(User),我的意思是没有当前用户的重复记录。 – blueboy