[英]Django call custom manager method in CreateView and UpdateView
your expert knowledge of Django demanded:smile: So here is the problem.您对 Django 的专业知识要求:微笑:所以这就是问题所在。 I created a custom
create_number
manager method.我创建了一个自定义
create_number
管理器方法。 I wanted to call this on form submit when user fill in number.当用户填写数字时,我想在表单提交时调用它。
class Number(models.Model):
user = models.ForeignKey(User, related_name="numbers")
number = models.PositiveIntegerField()
verification_code = models.CharField(max_length=6)
is_verified = models.BooleanField(default=False)
objects = NumberQueryset.as_manager()
class NumberQueryset(models.QuerySet):
def create_number(self, number, user):
if number_validator(number):
if self.filter(is_verified=True, user=user, number=number).exists():
raise ValidationError("Number already verified")
else:
verification_code = generate_random()
self.create(user=user, number=number, verification_code=verification_code, operator=get_operator(number), valid_until = timezone.now()+timezone.timedelta(seconds=VALID_UNTIL_CONSTANT))
So in a views.py I tried using CreateView
and created a form with following.因此,在views.py 中,我尝试使用
CreateView
并创建了一个带有以下内容的表单。 Now user redirects to Verify view and fill in verification code, if verification code is expired how can i show error on that page?现在用户重定向到验证视图并填写验证码,如果验证码已过期,我如何在该页面上显示错误?
class NumberRegister(LoginRequiredMixin, CreateView):
model = Number
fields = ['number']
def form_valid(self, form):
if form.is_valid:
Number.objects.create_number(number=form.cleaned_data['number', user=self.request.user .....)
redirect(reverse('verify', kwargs={'number': form.cleaned_data['number']}))
class Verify(LoginRequiredMixin, UpdateView):
You have to add a custom manager like below您必须添加一个自定义管理器,如下所示
class NumberManager(models.Manager):
def get_queryset(self):
return NumberQueryset(self.model, using=self._db)
and on bottom of your model call it like so在你的 model 的底部这样称呼它
objects = NumberManager()
and call it in your views.并在你的观点中称之为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.