Поле 'id' ожидало число, но получило <Пользователь: ben
Я создал скрипт популяции для сайта django, однако после запуска скрипта и выполнения миграций я вошел на страницу администратора django для моего сайта, чтобы получить доступ к объектам, созданным с помощью скрипта, и не смог сделать этого для моей модели Business. Для других моделей все работает нормально.
Я получаю эту ошибку, когда пытаюсь получить доступ к зарегистрированным Бизнесменам в моей базе данных со страницы администратора Django. Похоже, что она не связана с моим кодом, а скорее с шаблоном в папке admin моей среды python. Вот сообщение об ошибке:
Вот мои модели:
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
profile_pic = models.ImageField(upload_to="profile_images", blank=True, default="profile_images/default.png")
description = models.TextField(max_length=1024, default="")
# boolean flag for identifying business owners
is_business_owner = models.BooleanField(default=False)
def __str__(self):
return self.user.username
class Business(models.Model):
owner_fk = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=128)
address = models.CharField(max_length=128)
img = models.ImageField(upload_to="business_images", blank=True)
slug = models.SlugField(unique=True)
class Meta:
verbose_name_plural = 'Businesses'
def save(self, *args, **kwargs):
self.slug = slugify(self.name)
super(Business, self).save(*args, **kwargs)
def __str__(self):
return f"{self.name} owned by {UserProfile.objects.get(pk=self.owner_fk).username}"
Вот как я создал объекты через скрипт популяции:
def add_user(username, firstname, lastname, password, profile_pic, description,
is_business_owner):
new_user = User.objects.get_or_create(username=username, password=password,
first_name=firstname, last_name=lastname)
if new_user[1]:
new_profile = UserProfile(user=User.objects.get(username=username))
new_profile.profile_pic = profile_pic
new_profile.description = description
new_profile.is_business_owner = is_business_owner
new_profile.save()
def add_business(owner, name, address, img):
new_business = Business(name=name, owner_fk=User.objects.get(username=owner))
new_business.address = address
new_business.img = img
new_business.save()
Любая помощь будет оценена по достоинству, спасибо.
Ваш класс Business имеет метод __str__. Вы пытаетесь передать объект User в ключ pk (id).
class Business(models.Model):
def __str__(self):
return f"{self.name} owned by {UserProfile.objects.get(pk=self.owner_fk).username}"
Вместо поиска User объекта в базе данных измените его на:
return f"{self.name} owned by {self.owner_fk.username}"
потому что вам не нужно искать в базе данных связанный объект, достаточно обратиться к нему напрямую.