字段 '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}"
因为您不必在数据库中搜索相关对象,只需直接解决它。
我为 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}"
因为您不必在数据库中搜索相关对象,只需直接解决它。