簡體   English   中英

Django 在 CreateView 和 UpdateView 中調用自定義管理器方法

[英]Django call custom manager method in CreateView and UpdateView

您對 Django 的專業知識要求:微笑:所以這就是問題所在。 我創建了一個自定義create_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))

因此,在views.py 中,我嘗試使用CreateView並創建了一個帶有以下內容的表單。 現在用戶重定向到驗證視圖並填寫驗證碼,如果驗證碼已過期,我如何在該頁面上顯示錯誤?


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):

您必須添加一個自定義管理器,如下所示

class NumberManager(models.Manager):

    def get_queryset(self):
        return NumberQueryset(self.model, using=self._db)

在你的 model 的底部這樣稱呼它

objects = NumberManager()

並在你的觀點中稱之為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM