Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Django管理面板添加数据时出错_Python_Django_Django Models_Django Admin_Django Admin Actions - Fatal编程技术网

Python 使用Django管理面板添加数据时出错

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='')

我目前正在试验Django框架,我制作了一个包含2个模型的应用程序。第一个是用户模型,它包含用户和一些关于用户的基本信息。第二个模型是图像模型,它有一个authorLink,用户模型有一个外键和一个文件名

应用程序名称: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添加用户,但是我不能添加任何图像

我选择了我想要的用户作为图像的作者,并添加了一个随机文件名,但在尝试添加新图像时出现以下错误:

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”,并删除并重新创建了数据库,但仍会出现相同的错误。另外,感谢图像字段信息,我将查看它: