2016-11-08 92 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