Ошибка DoesNotExist при использовании пользовательской модели User
У меня есть модель Group в моем group/models.py
файле:
class Group(models.Model):
leader = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=55)
description = models.TextField()
joined = models.ManyToManyField(User, blank=True)
и модель Account, которая является расширением стандартного User в django, в users/models.py
:
class Account(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
joined_groups = models.ManyToManyField(Group, related_name='joined_group')
created_groups = models.ManyToManyField(Group)
в users/admin.py
:
class AccountInline(admin.StackedInline):
model = Account
can_delete = False
verbose_name_plural = 'Accounts'
class CustomUserAdmin(UserAdmin):
inlines = (AccountInline,)
admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)
Проблема, которую мне трудно понять, заключается в том, что когда я создаю нового пользователя, учетная запись для этого пользователя, похоже, не регистрируется. В нижней части страницы нового пользователя (через сайт django admin) новый аккаунт выглядит следующим образом:
Теперь, этот новый пользователь, кажется, имеет учетную запись, которая содержит joined_groups
и created_groups
, но когда я пытаюсь присоединиться или создать группу с этим новым пользователем, я получаю ошибку DoesNotExist - Account matching query does not exist
Я не уверен, почему новый пользователь/аккаунт не регистрирует свой аккаунт. Для сравнения, на моей странице AdminUser информация об учетной записи выглядит следующим образом:
Account: #1
для нового пользователя против Account: Acount object (6)
для пользователя Admin.
Наконец, когда я захожу на сайт администратора django, добавляю нового пользователя в группу и нажимаю сохранить, Account: #1
меняется на Account: Acount object (7)
, что позволяет новому пользователю создавать и присоединяться к другим группам.
Я совершенно не понимаю, что происходит и почему это происходит. Это важно, потому что я хочу, чтобы новые пользователи, которые регистрируются, могли присоединяться и создавать группы с администратором, начинающим их. Неужели я испортил свою модель аккаунта? Или это что-то связанное с общей моделью пользователя django? Или это что-то совсем другое?
В принципе, у вас есть два models
, соединенных relationship
, но я не вижу кода для создания учетной записи object
. Хорошей практикой является создание профиля, связанного с пользователем, с помощью сигнала post_save
.
from django.contrib.auth.models import User
from django.dispatch import receiver
from django.db.models.signals import post_save
from .models import Account
@receiver(post_save, sender=User)
def create_save_account(sender, instance, created, **kwargs):
if created:
Account.objects.create(user=instance)
instance.account.save()
Кроме того, я обращаюсь к документации и примерам.