Дублирование записей на Django
Похоже, что я получаю дубликат записи или ошибку целостности при попытке создать или обновить мои записи. Я пробовал использовать objects.get_or_create() и objects.update_or_create(). Создание, кажется, работает хорошо, когда еще нет записей, но обновление почему-то выдает ошибку дублирования записи.
вот мой views.py:
def evaluate(request):
r = []
i = []
a = []
s = []
e = []
c = []
for id in range(1,43):
score = float(request.POST.get(f'{id}'))
question = RIASEC_Test.objects.get(pk=id)
if question.category == 'R':
r.append(score)
if question.category == 'I':
i.append(score)
if question.category == 'A':
a.append(score)
if question.category == 'S':
s.append(score)
if question.category == 'E':
e.append(score)
if question.category == 'C':
c.append(score)
r = (sum(r)/7) * 100
i = (sum(i)/7) * 100
a = (sum(a)/7) * 100
s = (sum(s)/7) * 100
e = (sum(e)/7) * 100
c = (sum(c)/7) * 100
name=request.user
try:
User=Riasec_result.objects.get(user=request.user)
Riasec_result.objects.update(user=User,reality=r, investigative=i, artistic=a, social=s,enterprising=e, conventional=c)
except ObjectDoesNotExist:
result=Riasec_result.objects.create(user=name,reality=r, investigative=i, artistic=a, social=s,enterprising=e, conventional=c)
result.save()
# if (Riasec_result.objects.get(user=name)):
# Riasec_result.objects.update(user=name, reality=r, investigative=i, artistic=a, social=s, enterprising=e,
# conventional=c)
# else:
# result = Riasec_result.objects.create(user=name, reality=r, investigative=i, artistic=a, social=s,
# enterprising=e, conventional=c)
# result.save()
return HttpResponseRedirect(reverse('riasec:home'))
и вот мой models.py:
class Riasec_result (models.Model):
class Meta:
verbose_name = _('RIASEC Result')
verbose_name_plural = _('RIASEC Results')
user=models.OneToOneField(User, null=True,on_delete=models.CASCADE)
reality = models.FloatField(null=True)
investigative = models.FloatField(default=0)
artistic = models.FloatField(default=0)
social = models.FloatField(default=0)
enterprising = models.FloatField (default=0)
conventional = models.FloatField(default=0)
date_created = models.DateTimeField(auto_now_add=True)
Если вы посмотрите на документацию django, там говорится:
Отношения "один к одному". Концептуально это похоже на ForeignKey с unique=True, но "обратная" сторона отношения непосредственно возвращает один объект.
Так что я предполагаю, что вы пытаетесь присвоить пару экземпляров Riasec_result
одному экземпляру User
и отсюда ошибка.