2016-11-08 2 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 (Пользователь), я имею в виду отсутствие повторных записей для текущего пользователя. – blueboy

Смежные вопросы