使用 Django 管理面板添加数据时出错
Error while adding data using Django Administration's panel
我目前正在试验 Django 框架,我制作了一个包含 2 个模型的应用程序。第一个是用户模型,其中包含用户和有关用户的一些基本信息。第二个模型是图像模型,它有一个作者(用外键链接用户模型)和一个文件名。
应用名称:Sc
模型:用户、图片
我的模型代码:
from django.db import models
class User(models.Model):
username = models.CharField(max_length=128, default='')
password = models.CharField(max_length=512, default='')
ip_address = models.CharField(max_length=32, default='')
def __str__(self):
return f"{self.id} - {self.username}"
class Image(models.Model):
author = models.ForeignKey(User, on_delete=models.DO_NOTHING)
filename = models.CharField(max_length=512)
def __str__(self):
return f"{User.objects.filter(id=self.author)} - {self.filename}"
我可以使用 Django 的管理面板 (localhost/admin) 添加用户,但是我无法添加任何图像。
我 select 我想要的用户作为图像的作者,我添加了一个随机文件名,但是当我尝试添加新图像时出现以下错误:
TypeError at /adminsc/image/add/
int() argument must be a string, a bytes-like object or a number, not 'User'
Request Method: POST
Request URL: http://localhost/adminsc/image/add/
Django Version: 2.0.7
Exception Type: TypeError
Exception Value:
int() argument must be a string, a bytes-like object or a number, not 'User'
Exception Location: C:\Python37\lib\site-packages\django\db\models\fields__init__.py in get_prep_value, line 947
Python Executable: C:\Python37\python.exe
Python Version: 3.7.0
Python Path:
['G:\smiley\Websites\local',
'C:\Python37\python37.zip',
'C:\Python37\DLLs',
'C:\Python37\lib',
'C:\Python37',
'C:\Python37\lib\site-packages']
Server time: Tue, 21 Aug 2018 00:05:30 +0000
我已经尝试删除包括迁移文件夹在内的数据库并从头开始重新启动,但我总是遇到同样的错误。它似乎在实际需要其主键时尝试传递用户对象。我将 ForeignKey(User) 用作图像的 attribute/column 是不是做错了什么?
错误消息说明了一切:
int() argument must be a string, a bytes-like object or a number, not 'User'
您传递的 User
对象在 .filter()
调用中用作 id
,这是无效的。
这里有多个问题:
- 你应该用过
{User.objects.filter(id=self.author.id)}
.
- 那将 不是 return 一个
User
对象(因为 filter()
调用)而是 User
的列表s 大小为 1。您可能应该将其更改为 {User.objects.get(id=self.author.id)}
上面的方法可行,但没有意义,因为这是获得 {self.author}
:
的昂贵方法
return f"{self.author) - {self.filename}"
我目前正在试验 Django 框架,我制作了一个包含 2 个模型的应用程序。第一个是用户模型,其中包含用户和有关用户的一些基本信息。第二个模型是图像模型,它有一个作者(用外键链接用户模型)和一个文件名。
应用名称:Sc
模型:用户、图片
我的模型代码:
from django.db import models
class User(models.Model):
username = models.CharField(max_length=128, default='')
password = models.CharField(max_length=512, default='')
ip_address = models.CharField(max_length=32, default='')
def __str__(self):
return f"{self.id} - {self.username}"
class Image(models.Model):
author = models.ForeignKey(User, on_delete=models.DO_NOTHING)
filename = models.CharField(max_length=512)
def __str__(self):
return f"{User.objects.filter(id=self.author)} - {self.filename}"
我可以使用 Django 的管理面板 (localhost/admin) 添加用户,但是我无法添加任何图像。
我 select 我想要的用户作为图像的作者,我添加了一个随机文件名,但是当我尝试添加新图像时出现以下错误:
TypeError at /adminsc/image/add/
int() argument must be a string, a bytes-like object or a number, not 'User'
Request Method: POST
Request URL: http://localhost/adminsc/image/add/
Django Version: 2.0.7
Exception Type: TypeError
Exception Value:
int() argument must be a string, a bytes-like object or a number, not 'User'
Exception Location: C:\Python37\lib\site-packages\django\db\models\fields__init__.py in get_prep_value, line 947
Python Executable: C:\Python37\python.exe
Python Version: 3.7.0
Python Path:
['G:\smiley\Websites\local',
'C:\Python37\python37.zip',
'C:\Python37\DLLs',
'C:\Python37\lib',
'C:\Python37',
'C:\Python37\lib\site-packages']
Server time: Tue, 21 Aug 2018 00:05:30 +0000
我已经尝试删除包括迁移文件夹在内的数据库并从头开始重新启动,但我总是遇到同样的错误。它似乎在实际需要其主键时尝试传递用户对象。我将 ForeignKey(User) 用作图像的 attribute/column 是不是做错了什么?
错误消息说明了一切:
int() argument must be a string, a bytes-like object or a number, not 'User'
您传递的 User
对象在 .filter()
调用中用作 id
,这是无效的。
这里有多个问题:
- 你应该用过
{User.objects.filter(id=self.author.id)}
. - 那将 不是 return 一个
User
对象(因为filter()
调用)而是User
的列表s 大小为 1。您可能应该将其更改为{User.objects.get(id=self.author.id)}
上面的方法可行,但没有意义,因为这是获得
的昂贵方法{self.author}
:return f"{self.author) - {self.filename}"