Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Django多对一关系,外键作为文本输入_Django_Django Views - Fatal编程技术网

Django多对一关系,外键作为文本输入

Django多对一关系,外键作为文本输入,django,django-views,Django,Django Views,我有两个数据库,Book和Comment(一本书可能有很多评论,但每个评论只引用一本书)。每个数据库都有一个HTML表单供用户输入图书数据或注释。ISBN是图书数据库的主键,是评论数据库的外键。在这两种html格式中,用户将使用文本输入来输入ISBN。我如何修改下面的html表单和代码,以便创建这样的多对一关系 models.py class Book(models.Model): ISBN = models.BigIntegerField(primary_key=True) C

我有两个数据库,Book和Comment(一本书可能有很多评论,但每个评论只引用一本书)。每个数据库都有一个HTML表单供用户输入图书数据或注释。ISBN是图书数据库的主键,是评论数据库的外键。在这两种html格式中,用户将使用文本输入来输入ISBN。我如何修改下面的html表单和代码,以便创建这样的多对一关系

models.py

class Book(models.Model):
    ISBN = models.BigIntegerField(primary_key=True)
    Chinese_Book_Name = models.CharField(max_length=200)
    English_Book_Name = models.CharField(max_length=200, blank = True)
    Author_Name = models.CharField(max_length=100)

class Comment(models.Model):
    ISBN = models.ForeignKey(Book, on_delete = models.CASCADE)
    age = models.CharField(max_length=10)
    score = models.IntegerField()
    comment = models.TextField()
    topic = models.CharField(max_length=100, blank = True)
    name = models.CharField(max_length=50)
    contact = models.CharField(max_length=200, blank = True)
Views.py

def saveBook(request):
    ISBN = request.POST['ISBN']
    Chinese_Book_Name = request.POST['chinese name']
    English_Book_Name = request.POST['english name']
    Author_Name = request.POST['author name']

    book = Book(ISBN = ISBN, Chinese_Book_Name = Chinese_Book_Name, English_Book_Name = English_Book_Name, Author_Name = Author_Name)
    book.save()
    return redirect('/input/addComment')

def saveComment(request):
    ISBN = request.POST['ISBN']
    age = request.POST['age']
    score = request.POST['score']
    topic = request.POST['topic']
    name = request.POST['name']
    contact = request.POST['contact']

    comment = Comment(ISBN=ISBN, age = age, score = score, topic = topic, name = name, contact = contact)
    comment.save()
    return redirect('/')

正如您在模型中所指定的那样,
ISBN
字段应指的是
Book
对象,而不是字符串;使用以下命令:

def saveComment(request):
        ISBN = request.POST['ISBN']
        age = request.POST['age']
        score = request.POST['score']
        topic = request.POST['topic']
        name = request.POST['name']
        contact = request.POST['contact']

        book = Book.objects.get(ISBN=ISBN)

        comment = Comment(ISBN=book, age = age, score = score, topic = topic, name = name, contact = contact)
        comment.save()
        return redirect('/')

还请记住,正如Django所建议的,您应该以模型的名称命名外键;因此,在这种情况下,您最好将
ISBN
字段名(属于
Comment
model)更改为
book

谢谢,但当我尝试迁移时,仍然出现错误:django.db.utils.OperationalError:外键不匹配-“input\u comment”引用“input\u book”。有什么想法吗?当这个错误发生的时候?将外键字段的名称(
ISBN
更改为
book
)后?还请包括错误的完整回溯。完整回溯太长,但我认为下面是错误发生的地方:运行迁移:应用输入。0024\u auto\u 20191119\u 0048…回溯(最近一次调用):文件“C:\Users\Julie Zhang\Anaconda3\lib\site packages\django\db\backends\utils.py”,第82行,在execute return Database.cursor.execute(sql)文件“C:\Users\Julie Zhang\Anaconda3\lib\site packages\django\db\backends\sqlite3\base.py”中,第381行,在execute return Database.cursor.execute(self,query)sqlite3.OPERROERROR:外键不匹配-“输入注释”引用“输入书”尝试删除迁移目录中的所有迁移文件,但
\uuuuu init\uuuuuuu.py除外
;然后再次运行
makemigration
migrate
,看看这是否解决了问题。我试过了,错误仍然存在。我也应该移动pycache吗?