AttributeError at /admin/accounts/user/1/change/ Объект 'User' не имеет атрибута 'profile'
Я создаю API. Когда я создаю нового пользователя или редактирую существующего пользователя и сохраняю, я получаю эту ошибку "AttributeError at /admin/accounts/user/1/change/ У объекта 'User' нет атрибута 'profile'"
Для ясности, у меня есть модель пользователя и модель профиля, связанные с моей моделью User отношениями "один к одному".
Вот моя модель пользователя
artist_name = models.CharField(
max_length=255,
default='artist name',
unique=True
)
slug = models.SlugField(max_length=250, null=True, blank=True)
email = models.EmailField(max_length=300, unique=True)
active = models.BooleanField(default=True)
staff = models.BooleanField(default=False)
admin = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now_add=True)
Моя модель профиля
class Profile(models.Model):
user = models.OneToOneField(
User,
on_delete=models.CASCADE,
related_name="user",
default=1
)
first_name = models.CharField(max_length=255, blank=True, null=True)
last_name = models.CharField(max_length=255, blank=True, null=True)
country = models.CharField(max_length=500, blank=True, null=True)
gender = models.CharField(max_length = 20, blank=True, null=True)
record_label = models.CharField(max_length=255, blank=True, null=True)
image = models.FileField()
И мои сигналы
from .models import User, Profile
from django.dispatch import receiver
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_profile(sender, instance, **kwargs):
instance.profile.save()
Я также должен упомянуть, что у меня пока нет просмотров для моего пользователя и профиля. Но я не думаю, что это должно повлиять на работу администратора. До сих пор я искал в Интернете, но ничего не помогло.
Заранее благодарю.
Я бы посоветовал вам не создавать отдельную модель пользователя, а использовать модель пользователя по умолчанию. обратите внимание, что некоторые функции, которые вам нужны в модели профиля, на самом деле присутствуют в модели пользователя. в модели пользователя по умолчанию есть first_name, last_name, email, username, password1 и password2, но если вы хотите использовать только модель пользователя, которую вы указали, то выполните следующие шаги. так в модели профиля поля, которые вы должны указать, должны быть следующими:
from django.contrib.auth.models import User
from .models import User, Profile
from django.dispatch import receiver
from django.db.models.signals import post_save
class User(models.Model):
artist_name = models.CharField(max_length=255, default='artist name', unique=True)
slug = models.SlugField(max_length=250, null=True, blank=True)
email = models.EmailField(max_length=300, unique=True)
active = models.BooleanField(default=True)
staff = models.BooleanField(default=False)
admin = models.BooleanField(default=False)
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now_add=True)
class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
country = models.CharField(max_length=500, blank=True, null=True)
gender = models.CharField(max_length = 20, blank=True, null=True)
record_label = models.CharField(max_length=255, blank=True, null=True)
image = models.ImageField()
@receiver(post_save, sender=User)
def create_profile(sender, instance, created, *args, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_profile(sender, created, instance, **kwargs):
if not created:
instance.profile.save()
Надеюсь, это поможет, и если это так, проголосуйте за этот ответ и дайте ответ.