Django.db.utils.IntegrityError: UNIQUE constraint failed OneToOneField Django

У меня проблема с моей базой данных. У меня есть две модели (Member, ActiveMember) с настроенными отношениями OneToOneField. Член может иметь только одно членство одновременно. Однако, похоже, я получаю ошибку Unique. Как только я обновляю членство члена с помощью функции обновления, все перепутывается, и ID больше не работает. Я также получаю другую ошибку DoesNotExist. Я думаю, что это происходит, когда я удаляю члена и/или обновляю его, идентификаторы каким-то образом смещаются. Эту ошибку я получил при попытке миграции. Мне пришлось удалить пользователя, который создавал мне проблемы, чтобы это сработало.

Это вторая ошибка DoesNotExist

Traceback (most recent call last):
  File "/home/topxgym/.virtualenvs/env/lib/python3.9/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/topxgym/.virtualenvs/env/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/topxgym/.virtualenvs/env/lib/python3.9/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/home/topxgym/.virtualenvs/env/topxgym/members/views.py", line 184, in update
    member = ActiveMember.objects.get(pk=id)
  File "/home/topxgym/.virtualenvs/env/lib/python3.9/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/home/topxgym/.virtualenvs/env/lib/python3.9/site-packages/django/db/models/query.py", line 650, in get
    raise self.model.DoesNotExist(

Exception Type: DoesNotExist at /update/7
Exception Value: ActiveMember matching query does not exist.

Это мой models.py

class Member(models.Model):
    full_name = models.CharField(max_length=125, unique=True)    
    email = models.EmailField(max_length=125, blank=True, null=True)
    phone = models.CharField(max_length=20)
    detail = models.CharField(max_length=256, blank=True, null=True)
    image = models.ImageField(max_length= 256, upload_to='media', null=True, blank=True)
    date_created = models.DateTimeField(default=django.utils.timezone.now)

    class Meta:
        verbose_name_plural = "All Members"

    def __str__(self):
        return str(f"{self.full_name}")
    
    def save(self, *args, **kwargs):
        # delete old file when replacing by updating the file
        try:
            this = Member.objects.get(id=self.id)
            if this.image != self.image:
                this.image.delete(save=False)
        except: pass # when new photo then we do nothing, normal case          
        super(Member, self).save(*args, **kwargs)


class ActiveMember(models.Model):
    member = models.ForeignKey(Member, on_delete=models.CASCADE, related_name='is_member')
    start_date = models.DateField(default=django.utils.timezone.now)
    end_date = models.DateField(default=django.utils.timezone.now)
    status = models.CharField(max_length=2, choices=(('0','None'), ('1','Active'), ('2','Inactive')), default = '1')
    
    def __str__(self): 
        return str(f"{self.member}")

Это мой views.py

@login_required(login_url='authenticate/admin_login')
def update(request, id):
    member = ActiveMember.objects.get(pk=id)
    if request.method == 'POST':
        form = ActiveMemberForm(request.POST, instance=member)
        if form.is_valid():
            # save form data to variables
            active_member = form.cleaned_data['member']
            start_date = form.cleaned_data['start_date']
            status = form.cleaned_data['status']

            # send WhatsApp message to inform user his membership has been activated.
            if  active_member.phone is not None and status == '1':
                msg = WhatsApp(active_member.full_name, active_member.phone, start_date)
                msg.send_message('customer_active')

            # save form to database.
            form.save()
            # redirect to the success message
            return render(request, 'members/update.html', {
                'form': form,
                'success': True,
            })
    else:
        form = ActiveMemberForm(instance=member)
    return render(request, 'members/update.html', {
        'form': form,
        'member': member,
        })

@login_required(login_url='authenticate/admin_login')
def delete(request, id):
    if request.method == 'POST':
        if request.user.is_superuser:
            member = Member.objects.get(pk=id)
            member.delete()
    return HttpResponseRedirect(reverse('members:index'))
Вернуться на верх