字段 'id' 需要一个数字但得到了 <User: ben>

Field 'id' expected a number but got <User: ben>

我为 Django 网站创建了一个填充脚本,但是,在 运行 脚本并进行迁移之后,我登录到我网站的 Django 管理页面以访问使用该脚本创建的对象,但无法访问为我的商业模式做这件事。它适用于我的其他型号。

当我尝试从 Django 管理页面访问数据库中已注册的企业时出现此错误。它似乎没有追溯到我的任何代码,而是追溯到我的 python 环境的管理文件夹中的模板。这是错误消息:

error message

这是我的模型:

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 class 有 __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}"

因为您不必在数据库中搜索相关对象,只需直接解决它。