Python 使用Django管理面板添加数据时出错
我目前正在试验Django框架,我制作了一个包含2个模型的应用程序。第一个是用户模型,它包含用户和一些关于用户的基本信息。第二个模型是图像模型,它有一个authorLink,用户模型有一个外键和一个文件名 应用程序名称:Sc 型号:用户、图像 我的模型的代码:Python 使用Django管理面板添加数据时出错,python,django,django-models,django-admin,django-admin-actions,Python,Django,Django Models,Django Admin,Django Admin Actions,我目前正在试验Django框架,我制作了一个包含2个模型的应用程序。第一个是用户模型,它包含用户和一些关于用户的基本信息。第二个模型是图像模型,它有一个authorLink,用户模型有一个外键和一个文件名 应用程序名称:Sc 型号:用户、图像 我的模型的代码: from django.db import models class User(models.Model): username = models.CharField(max_length=128, default='')
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添加用户,但是我不能添加任何图像
我选择了我想要的用户作为图像的作者,并添加了一个随机文件名,但在尝试添加新图像时出现以下错误:
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
我已经尝试过删除数据库,包括migrations文件夹,然后从头开始重新启动,但总是出现相同的错误。它似乎试图在实际需要主键时传递用户对象。使用ForeignKeyUser作为图像的属性/列是否有问题?错误消息说明了一切:
int() argument must be a string, a bytes-like object or a number, not 'User'
您正在传递一个用户对象以用作.filter调用中的id,这是无效的
这里有多个问题:
您应该使用{User.objects.filterid=self.author.id}。
由于筛选器调用,它不会返回用户对象,而是返回大小为1的用户列表。您可能应该将其更改为{User.objects.getid=self.author.id}
上述方法可行,但没有意义,因为这是获取{self.author}的昂贵方法:
返回f{self.author-{self.filename}
重命名内置用户模型时可能会遇到一些问题。此外,您是否查看了models.ImageField?因此,我已将我的“用户”模型重命名为“BananaMan”,并删除并重新创建了数据库,但仍会出现相同的错误。另外,感谢图像字段信息,我将查看它: