javascript - 限制用户帖子/天 django(就像 stackoverflow 所做的那样)
问题描述
这是我的帖子模型
class Post(models.Model):
title = models.CharField(max_length=40, blank=True, null=True)
description = models.TextField(null=True, blank=True)
image = models.ImageField(upload_to='comments/posts_images/', null=True, blank=True)
post_file = models.FileField(upload_to='comments/file_uploades/', blank=True, null=True)
category = models.ForeignKey(
Category, on_delete=models.CASCADE,)
user = models.ForeignKey(User, on_delete=models.CASCADE)
# Voting
likes = models.ManyToManyField(User, related_name='post_like', blank=True)
dislikes = models.ManyToManyField(User, related_name='post_dislike', blank=True)
# AUTO
post_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'Post by user: {self.user}'
这是我的用户模型:
class User(AbstractUser):
friends = models.ManyToManyField('User', blank=True)
bio = models.CharField(
max_length=400, default='I love this website!', blank=True, null=True,)
avatar = models.ImageField(
upload_to='profile_images', default='profile_images/DefaultUserImage.jpg',)
...
allow_friend_request = models.BooleanField(default=True)
# MAX SENDING
max_posts = models.IntegerField(default=0)
现在在views.py中:
def create_post(request, pk):
category = get_object_or_404(Category, pk=pk)
#! NOT SERIALIZING IMAGES
# Images category
if request.user.max_posts >= 3:
messages.error(
request, f'You can only make 3 posts a day, please wait till tommorow')
return redirect('categories:view_category', pk=pk)
else:
# if pk == 1:
# image = request.GET.get('image')
# description = request.GET.get('description')
# if image:
# if description:
# post = Post(description=description, image=image,
# user=request.user, category=category)
# post.save()
# else:
# post = Post(description=description,
# user=request.user, category=category)
# post.save()
# else:
# # todo return error
# pass
# Fun Area Category
if pk == 2:
post = Post(user=request.user, category=category)
if request.POST['description']:
post.description = request.POST['description']
post.save()
request.user.max_posts += 1
messages.warning(request, request.user.max_posts)
if request.POST['image'] and request.POST['post_file']:
messages.error(request, 'You can\'t have both image and file')
elif request.POST['image']:
post.image = request.POST['image']
post.save(instance=post)
elif request.POST['post_file']:
post.post_file = request.POST['post_file']
post.save(instance=post)
return redirect('categories:view_category', pk=category.id)
(我知道views.py中的代码看起来很脏,我真的很感激它的任何帮助)我想要实现的是当用户创建帖子时,max_posts的数量增加1,但这不会发生第二件事是每 24 小时所有用户 max_posts 字段都返回零,我不知道如何实现这一点。
解决方案
您不需要保存用户发布的帖子数量,您可以执行查询来计算用户在最后一天发布的帖子数量
import datetime
from django.utils.timezone import now
def create_post(request, pk):
posts_in_last_24_hours = request.user.post_set.filter(
post_date__gt=now() - datetime.timedelta(days=1)
)
if post_in_last_24_hours.count() >= 3:
# Throw error
由于您可能会定期执行此查询,因此最好在这两个字段上添加索引
class Post(models.Model):
class Meta:
indexes = [
models.Index(fields=['user', 'post_date']),
]
推荐阅读
- linux - GREP 或 Regex 搜索具有特定系列的唯一字符
- javascript - 如何更改饼图中向下钻取的点格式?
- c++ - 如何在 WinDBG 预览版上设置源服务器?
- visual-studio - 解决方案资源管理器:将搜索限制为选定的文件夹
- facebook - Xamarin 和 Facebook 身份验证
- c# - 通过调度程序/数据绑定在此更新 UI 中缺少什么
- machine-learning - 给定来自不同广告商的描述,生成不特定于任何一个广告商的一般描述?
- elasticsearch - 如何在 Kibana elasticSearch 中搜索 Json 消息
- odata - SAPUI5 OData 401(未经授权)+无访问控制允许来源标题
- sql-server - 尝试在 Azure SQL 上添加多个用户