基本上我所缺少的是保存与用户对应的点赞。就像Paolo指出的那样,通过使用User和main模型作为外键来创建模型,可以轻松解决此问题。
models.py
from django.db import models
from django.contrib.auth.models import User
class Todo(models.Model):
text = models.CharField(max_length=100)
complete = models.BooleanField(default=False)
def __str__(self):
return self.text
class Todo_likes(models.Model):
todo = models.ForeignKey(Todo,on_delete=models.CASCADE)
user = models.ForeignKey(User,on_delete=models.CASCADE)
views.py
from django.shortcuts import render,redirect
from .models import Todo,Todo_likes
from .forms import TodoForm
def like(request,todo_id):
user = request.user
todo = Todo.objects.get(id=todo_id)
like,created = Todo_likes.objects.get_or_create( # get_or_create will
# itself do the job of
# finding and creating if not exist
user = user,todo = todo
)
if not created:
return redirect('index') #I don't wanted to show any error if existed earlier.
#I just wanted to redirect.
else:
return redirect('index')
然后通过简单地进入“索引”视图并插入
来计算喜欢的次数
def index(request):
form = TodoForm()
todo_list = Todo.objects.order_by('id')
likes = Todo_likes.objects.count() # Adding this line
context= {'todo' : todo_list,'form':form,'likes' : likes}
return render(request,'todolistapp/index.html',context)
并在模板中显示“喜欢”对象。
,
我想尝试一下,扩大我的评论。
我的建议是,创建一个新模型Todo_Likes
,它将同时将Todo
和User
模型都设为Foreign Keys
,以便能够追踪谁喜欢{{1 }}。
models.py
Todo
views.py
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Todo(models.Model):
text = models.CharField(max_length=100)
complete = models.BooleanField(default=False)
# Got rid of the user FK and like since I would count likes using
# Todo_Like.objects.count()
def __str__(self):
return self.text
class Todo_Like(models.Model):
todo = models.ForeignKey(Todo)
user = models.ForeignKey(User)
我也想提前回答一个问题。
- 您可能会问您现在如何计算点赞次数?答案:利用Todo_Like.objects.count(),并确保您按Todo进行计数。
本文链接:https://www.f2er.com/3121972.html