[英]Modelformset in django generic CreateView and 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.