我得到错误NULL约束失败: Movies_comment.movie_id。我试图返回模型类电影中评论和评分的平均值,但是我得到了错误NULL约束失败: Movies_comment.movie_id。我怎么才能修好它?
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)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/异常值:外键约束失败
发布于 2022-07-12 15:21:05
由于您没有提供追溯功能,导致这种错误的唯一地方是在这里:
Comment(comment=comment, stars = stars, user=user,movie_id=movie_id).save()您正在创建新对象,但是变量movie_id似乎是空的(None)。您需要确保它以正确的方式传递到视图(如http://yourdomain.com/view_movie_detail/12/ )。
https://stackoverflow.com/questions/72953630
复制相似问题