首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NULL约束失败: Movies_comment.movie_id djnago

NULL约束失败: Movies_comment.movie_id djnago
EN

Stack Overflow用户
提问于 2022-07-12 14:02:22
回答 1查看 143关注 0票数 -1

我得到错误NULL约束失败: Movies_comment.movie_id。我试图返回模型类电影中评论和评分的平均值,但是我得到了错误NULL约束失败: Movies_comment.movie_id。我怎么才能修好它?

代码语言:javascript
复制
class Movie(models.Model):
    
    def get_comments(self):
        return Comment.objects.filter(movie_id=self.id)
    
    def average_stars(self):
        comments = self.get_comments()
        n_comments = comments.count()
        if n_comments == 0:
            return 0
        else:
            return sum([comment.stars for comment in comments]) / n_comments
    

class Comment(models.Model):
    comment     = models.TextField(max_length=1000)
    stars       = models.FloatField(
                     blank=False,
                     null=False,
                     default=0, 
                     validators=[MinValueValidator(0.0),
                     MaxValueValidator(10.0)]
                  )

    user        = models.OneToOneField(CustomUser, on_delete=models.CASCADE,)
    movie       = models.ForeignKey(Movie, on_delete=models.CASCADE)
    created_at  = models.DateTimeField(default=datetime.now)
    updated_at  = models.DateTimeField(auto_now=True)
代码语言:javascript
复制
def view_movie_detail(request, movie_id):
    if request.method == "POST":
        user = request.user  
        comment = request.POST.get("comment")
        stars = request.POST.get("stars")
        if not request.user.is_authenticated:
            user = User.objects.get(id=1)

        Comment(comment=comment, stars = stars, user=user,movie_id=movie_id).save()

        return redirect(f"/movie/{movie_id}/")
    else:
        data = requests.get(f"https://api.themoviedb.org/3/movie/{movie_id}?api_key={TMDB_API_KEY}&language=en-US")
        recommendations = requests.get(f"https://api.themoviedb.org/3/movie/{movie_id}/recommendations?api_key={TMDB_API_KEY}&language=en-US")
        comments = reversed(Movie().get_comments())
        average = Movie().average_stars()
        return render(request, "Movie/movie_detail.html", {
            "data": data.json(),
            "recommendations": recommendations.json(),
            "type": "movie",
            "comments": comments,
            "average" : average,
        })

上面的异常( NULL约束失败: Movies_comment.movie_id)是导致以下异常的直接原因:

Traceback:Traceback(最近一次调用):文件"C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\utils.py",第98行,在内部返回函数(*args,**kwargs)

上述异常(外键约束失败)是以下异常的直接原因:文件"C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\exception.py",行55,内部响应=get_response(请求)文件"C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\core\handlers\base.py",行197,_get_response响应=wrapped_callback(请求,*callback_args,文件"C:\Users\81804\enviroment\MovieReview\MovieReview\Movies\views.py",( **callback_kwargs)第74行,在view_movie_detail注释(comment=comment,stars = stars,user=user,movie_id=movie_id)中,文件user=user()user=user()在保存"C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\base.py",(文件"C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\base.py",行857,save_base self.save_base= self._save_table(文件“C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\base.py”,行1000 )中,在"C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\base.py",结果= self._do_insert(文件"C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\manager.py",行1041,_do_insert返回manager._insert(文件“C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\manager.py”,行85,manager_method返回getattr(self.get_queryset(),name))中(*args,**kwargs)文件"C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\query.py",第1434行,在_insert返回query.get_compiler(using=using).execute_sql(returning_fields)文件"C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\models\sql\compiler.py",第1632行,在self.connection.ops.fetch_returned_insert_columns(文件"C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\backends\base\operations.py",第205行中,在fetch_returned_insert_columns返回cursor.fetchone()文件第98行中,在内部返回函数(*args)中**kwargs)文件"C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\utils.py",第91行,在出口中从exc_value File "C:\Users\81804\AppData\Local\Programs\Python\Python38\lib\site-packages\django\db\utils.py",第98行提起dj_exc_value.with_traceback(回溯),在内部返回函数(*args,**kwargs)

异常类型:/ IntegrityError /616037/异常值:外键约束失败

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-12 15:21:05

由于您没有提供追溯功能,导致这种错误的唯一地方是在这里:

代码语言:javascript
复制
Comment(comment=comment, stars = stars, user=user,movie_id=movie_id).save()

您正在创建新对象,但是变量movie_id似乎是空的(None)。您需要确保它以正确的方式传递到视图(如http://yourdomain.com/view_movie_detail/12/ )。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72953630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档