简体   繁体   English

Django 在 CreateView 和 UpdateView 中调用自定义管理器方法

[英]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.

相关问题 django泛型CreateView和UpdateView中的Modelformset - Modelformset in django generic CreateView and UpdateView 如何在Django中为CreateView和UpdateView创建通用模板 - How To Create Generic Templates for CreateView and UpdateView in Django 如何在Django CreateView和UpdateView中呈现Form实例? - How to render Form instance in Django CreateView & UpdateView? 有没有办法让updateview中的时间与django中createview中的时间保持一致 - is there a way to keep the time in updateview same as the time in createview in django 在CreateView上需要表单域的正确Django方法,而在UpdateView上是可选的? - The proper Django way to make a form field required on CreateView, but optional on UpdateView? 在 Django 中,CreateView 和 UpdateView 是否有默认模板名称? - In Django Do CreateView and UpdateView have a default template name? Django在CreateView中禁用/排除字段,但在UpdateView中启用/包含它 - Django Disable/Exclude Field in CreateView but enable/include it in UpdateView 使用CreateView / ModelForm和自定义清理方法时在django中验证模型 - Model validating in django when using CreateView/ModelForm with custom clean method CreateView不在提交时保存,而是在UpdateView上保存 - CreateView not saving on submit, but is on UpdateView 发布方法在 updateview django 中不起作用 - Post method is not working in updateview django
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM