Я хочу CRUD комментарии пользователя django
Чего вы хотите достичь
Когда пользователь публикует комментарий к фильму, я могу комментировать только этот комментарий, и я хочу обновлять и удалять его без изменения URL.
Что вы хотите спросить
- Как сделать так, чтобы мое сообщение появлялось в верхней части новых сообщений, когда пользователи оставляют комментарии?
- Как мне изменить delete и update при изменении url опубликованного комментария?
Текущий код
def view_movie_detail (request, movie_id):
if not (Movie.objects.filter (id = movie_id)):
Movie (id = movie_id) .save ()
movie = Movie.objects.get (id = movie_id).
if request.method == "POST" and not (Comment_movie.objects.filter (user = request.user, movie = movie_id)):
form = Comment_movie_CreateForm (request.POST)
if form.is_valid ():
Comment_movie (
comment = form.cleaned_data ['comment'],
user = request.user,
stars = form.cleaned_data ['stars'], user = request.user, star = form.cleaned_data ['stars'],
Movie = movie
). Save ()
return redirect ('view_movie_detail', movie_id = movie_id)
Otherwise
form = Comment_movie_CreateForm ()
data = requests.get (f "https://api.themoviedb.org/3/movie/{movie_id}?api_key={TMDB_API_KEY}&language=ja-US")
Recommendation = requests.get (f "https://api.themoviedb.org/3/movie/{movie_id}/recommendations?api_key={TMDB_API_KEY}&language=en-US")
comments = reversed (Comment_movie.objects.filter (movie_id = movie_id))
Mean = movie.average_stars ()
Context = {
"data": data.json (),
"Recommendations": recommendations.json ().
"Type": "Movie",
"Comment": Comment
"average": average value,
"form": form.
}
return render (request, "Movie / movie_detail.html", context)
class Movie (models.Model):
id = models.CharField (primary_key = True, editable = False,
validators = [alphanumeric], max_length = 9999)
def get_comments (self):
return Comment_movie.objects.filter (movie_id = self.id)
def average_stars (self):
Comments = self.get_comments ()
n_comments = comments.count ()
if n_comments:
return sum ([comment.stars for comment in comments]) / n_comments
else: else:
return 0
class Comment_movie (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.ForeignKey (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)
class Meta:
unique_together = ('user','movie')
indexes = [
models.Index (fields = ['user','movie']),
]
{% if user.is_anonymous%}
<a class="nav-link" href="{% url'account_login'%}"> Login </a>
{% else%}
<h2> Comments </ h2>
{% if form.errors%}
<div class = "error_list">
{% for errors in form.errors.values%}
{% for error in errors%}
{{error}} <br>
{% endfor%}
{% endfor%}
</ div>
{% endif%}
<form method = "POST" enctype = "multipart / form-data">
{% csrf_token%}
{{form}}
<button type = "submit"> Post Comment </ button>
</ form>
{% endif%}
<hr>
<table>
<tr>
<tr>
<th> image </ th>
<th> name </ th>
<th> created_at </ th>
<th> comment </ th>
<th> evaluation </ th>
</ tr>
{% for c in comments%}
<tr>
<td> <img class = "rounded-circle" src = "{{user.avatar.url}}" alt = "..." width = "100" height = "100"> </ td>
<td> {{c.user.nickname}} </ td>
<td> {{c.created_at}} </ td>
<td> {{c.comment}} </ td>
<td> <h2 class = "rate" style = "--rating: {{c.stars}}"> {{c.stars}} </ h2> </ td>
</tr>
{% endfor%}.
</ table>