Невозможно вызвать .delete() для экземпляра учетной записи пользователя в Django

Я пытаюсь настроить простое представление для удаления учетных записей пользователей. Однако по какой-то причине оно возвращает

Поле 'id' ожидало число, но получило 'deleted_user'.

и не удаляет экземпляр.

# View

def delete_account(request, username):
    """
    Deletes the user account
    """
    user = Account.objects.get(username=username).delete()

    return redirect('pollboard')
# Model

class Account(AbstractBaseUser):

    email = models.EmailField(verbose_name='email', max_length=60, unique=True)
    username = models.CharField(max_length=40, unique=True)
    date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
    email_confirmed = models.BooleanField(default=False)
    last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    profile_image = models.ImageField(max_length=255, upload_to=get_profile_image_filepath, null=True, blank=True, default=get_default_profile_image())
    hide_email = models.BooleanField(default=True)


class Poller(models.Model):
    """
    Main Model to describe Poller objects
    """
    created_on = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(Account, on_delete=models.SET('deleted_user'))
# Template

        <div class="delete-modal-buttons">
            <a href="{% url 'delete-account' username=user.username %}"><button class="delete-button" id="delete-account">Delete Account</button></a>
            <button class="delete-button" id="cancel-delete">Cancel</button>
        </div>

Вы указали on_delete=models.SET('deleted_user') для внешнего ключа, указывающего на ваш Account. Это буквально пытается установить значение поля в строку 'deleted_user'. Проблема в том, что внешний ключ - это (в основном) первичный ключ связанной строки другой таблицы, который по умолчанию является целым числом. Поэтому установка его в строку не имеет смысла. Вместо этого вы можете передать функцию models.SET, которая получит или создаст пользователя-заполнителя, как описано в документации :

def get_deleted_user():
    return Account.objects.get_or_create(username='deleted_user')[0]


class Poller(models.Model):
    """
    Main Model to describe Poller objects
    """
    created_on = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(Account, on_delete=models.SET(get_deleted_user))
Вернуться на верх