Django.db.utils.IntegrityError: (1062, "Дублирующаяся запись '8d4d1c76950748619f93ee2bfffc7de5' для ключа 'request_id'")
Я не понимаю, что это за ошибка? Иногда этот код работает, а после 1-2 раз отправки формы, когда я пытаюсь отправить форму снова с другими данными, я получаю эту ошибку, django.db.utils.IntegrityError: (1062, "Duplicate entry '8d4d1c76950748619f93ee2bfffc7de5' for key 'request_id'")
>Вот мой код views.py
@api_view(['POST', 'GET'])
def add_info_view(request):
if request.method == 'POST':
form = GitInfoForm(request.POST)
if form.is_valid():
form.save()
try:
git_Id = form.cleaned_data['git_Id']
s = Gitinformation.objects.filter(git_Id=git_Id).values('request_id')
print('Value of S :', s[0]['request_id'])
s = s[0]['request_id']
approve_url = f"http://127.0.0.1:8000/Approve/?request_id={str(s)}"
print("Url : ", approve_url)
try:
send_mail(
'KSA Test Activation',
approve_url,
'Noreplygcontrol@airlinq.com',
['sorav.parmar@airlinq.com'],
fail_silently=False,
)
request.session['approve_url'] = approve_url
print('Approve Url sent : ', approve_url)
except Exception as e:
pass
except Exception as e:
pass
form = GitInfoForm()
form = GitInfoForm()
return render(request, 'requestApp/addInfo.html', {'form': form})
Как избавиться от этой ошибки, пожалуйста, помогите мне.
Основываясь на вашем комментарии.
request_id = models.UUIDField(primary_key=False, default=uuid.uuid4().hex, editable=False, unique=True)
Вы назначили экземпляр UUID для значения по умолчанию. Фактически, вы не задали функцию для генерации нового UUID для каждой записи. Если вы проверите соответствующий файл миграции, вы увидите строку, подобную этой:
('request_id', models.UUIDField(default='97c8a76eefe8445081fcfec3af4f1df2', editable=False, unique=True))
вы установили экземпляр UUID по умолчанию, но уникальное свойство установлено, из-за этого при первом сохранении записи все нормально, но при последующих записях вы сталкиваетесь с ошибкой.
На самом деле, вы должны установить функцию по умолчанию, чтобы она выполнялась для каждой записи. Вы должны установить свойства, как показано ниже:
request_id = models.UUIDField(primary_key=False, default=uuid.uuid4, editable=False, unique=True)