我有产品添加/编辑表单。我有以下情况:
每个用户最多可以有2个帖子
现在,我要检查用户当前拥有多少产品。我在form_valid
类的子类的CreateView
中临时实现了这一点:
def form_valid(self, form):
max_prod = 2
form.instance.author = self.request.user
prod = len(User.objects.get(id=self.request.user.id).product_set.all())
if prod > max_prod:
form.add_error(error=f"You have reached product limit ({max_prod})", field="name")
return super().form_invalid(form)
else:
return super().form_valid(form)
但是,我读到最好的方法是通过在clean()
方法中为特定模型添加条件。但是,就我而言,我需要以某种方式获取当前用户。我该怎么办?
编辑:
我尝试添加以下内容:
prod = len(User.objects.get(id=self.author.id).product_set.all())
但是,执行此方法时似乎没有保存作者:
products.models.Product.author.RelatedObjectDoesNotExist:产品没有作者。
Edit2:产品型号:
class Product(models.Model):
name = models.CharField(max_length=255)
author = models.ForeignKey(User, on_delete=models.CASCADE)
Edit3:如果可能的话,我想在模型级别创建它,因为我也有用于产品的REST api
在models.py中,使您的用户类带有字段示例:
class User(models.Model):
name = models.CharField(max_length=120)
posts = models.IntegerField()
在views.py顶部:
from django.shortcuts import get_object_or_404
from .models import User
然后做:
prod = get_object_or_404(User, <id>)
显然是替换您可以通过以下方式访问帖子:
prod.posts