我将学习Python,我试图做视频课程,但一切都为他们工作,但我得到这个错误,我想写喜欢使用JavaScript。但它给了我一个错误在这一点上:post_obj = Post.objects.get(id=post_id)
models.py
title = models.CharField(max_length=222, verbose_name='Заголовок')
text = models.TextField(blank=True, verbose_name='Текст')
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
views = models.ManyToManyField(IpModel, related_name="post_views", blank=True)
def total_views(self):
return self.views.count()
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('new_detail', kwargs={'pk': self.pk})
LIKE_CHOICES = (
('Like', 'Like'),
('Unlike', 'Unlike'),
)
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
value = models.CharField(choices=LIKE_CHOICES, max_length=8)
updated = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"{self.user}-{self.post}-{self.value}"
views.py
def like_unlike_post(request):
user = request.user
if request.method == 'POST':
post_id = request.POST.get('post_id')
post_obj = Post.objects.get(id=post_id)
user = Post.objects.get(user=user)
if user in post_obj.liked.all():
post_obj.liked.remove(user)
else:
post_obj.liked.add(user)
like, created = Like.objects.get_or_create(user=user, post_id=post_id)
if not created:
if like.value=='Like':
like.value='Unlike'
else:
like.value='Like'
else:
like.value='Like'
post_obj.save()
like.save()
return redirect('like_button:main-post-view')
urls.py
urlpatterns = [
path('', index, name='index'),
path('liked/', like_unlike_post, name='like-post-view'),
超文本标记语言
<div class="content">
<p> {{ obj.content }} </p>
<div class="right floated">
<form action="{% url 'like_button:like-post-view' %}" method="POST" class='like-form' id='{{obj.id}}'>
{% csrf_token %}
<input type="hidden" name="post_id" value={{obj.id}}>
<button type="submit" class="ui button like-btn{{obj.id}}">
❤
{% if profile not in obj.liked.all %}
Like
{% else %}
Unlike
{% endif %}
</button>
<div class="ui grid">
<div class="column">
<div class="like-count{{obj.id}}"> {{obj.num_likes}} </div>
</div>
<div class="column">
likes
</div>
</div>
</form>
</div>
<script>
$( document ).ready(function() {
let display = false
$(".cmt_btn").click(function () {
if (display===false) {
$(this).next(".comment-box").show("slow");
display=true
} else {
$(this).next(".comment-box").hide("slow");
display=false
}
});
$('.like-form').submit(function(e){
e.preventDefault()
const post_id = $(this).attr('id')
const likeText = $(`.like-btn${post_id}`).text()
const trim = $.trim(likeText)
const url = $(this).attr('action')
let res;
const likes = $(`.like-count${post_id}`).text()
const trimCount = parseInt(likes)
$.ajax({
type: 'POST',
url: url,
data: {
'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val(),
'post_id':post_id,
},
success: function(response) {
if(trim === 'Unlike') {
$(`.like-btn${post_id}`).text('Like')
res = trimCount - 1
} else {
$(`.like-btn${post_id}`).text('Unlike')
res = trimCount + 1
}
$(`.like-count${post_id}`).text(res)
},
error: function(response) {
console.log('error', response)
}
})
})
});
</script>
我尝试将post_id = request.POST.get('post_id')
更改为post_id = request.POST.get('id')
错误:Traceback切换到复制粘贴视图
D:\Projects\site_news\venv\Lib\site-packages\django\db\models\fields\__init__.py, line 2018, in get_prep_value
return int(value)
…
Local vars
The above exception (invalid literal for int() with base 10: '') was the direct cause of the following exception:
D:\Projects\site_news\venv\Lib\site-packages\django\core\handlers\exception.py, line 56, in inner
response = get_response(request)
…
Local vars
D:\Projects\site_news\venv\Lib\site-packages\django\core\handlers\base.py, line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
…
Local vars
D:\Projects\site_news\main\views.py, line 360, in like_unlike_post
post_obj = Post.objects.get(id=post_id)
1条答案
按热度按时间tf7tbtn21#
在POST请求中,post_id似乎是一个空字符串:
请检查 AJAX 调用端的post_id值