Дублирование записей на 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 и отсюда ошибка.

Вернуться на верх