2016-11-08 2 views
0

1.Models's nameは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列には重複した値が設定されます。
この問題を処理するために 'with transaction.atomic'を使用するDjangoドキュメントで何かが見つかりましたが、機能しませんでした。

+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 =キーワードので、あなたのコードを確認してください、新しいレコードに新しいキーワードがDEFデータビューに渡されるたびに作成されます。

+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

関連する問題