Поле '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}"

потому что вам не нужно искать в базе данных связанный объект, достаточно обратиться к нему напрямую.

Вернуться на верх