[英]How to validate array of choices in Django ModelForm against preset list of choices
[英]How to Validate Against Current User in Django?
我有關注 model
class User(AbstractBaseUser, PermissionsMixin):
#: First and last name do not cover name patterns around the globe
username = CharField(max_length=100,unique=True)
email = models.EmailField(_('email address'), unique=True)
full_name = TitleCharField(max_length=100)
phone_number = PhoneNumberField()
referred_by = models.ForeignKey('self', on_delete=models.CASCADE)
is_member = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
場景是同一用戶不能是用戶並且由用戶推薦。 到目前為止我所做的是
def clean(self):
if self == self.referred_by:
raise DjangoValidationError({'referred_by': _('Same user cannot be referred by user')})
我覺得我做的不對,我該怎么辦?
您可以通過使用referred_by
的主鍵清理它來提高效率,因為這樣可以避免額外的查詢。 此外,您應該調用super().clean()
以便還執行對父類的驗證,並且您還可以嘗試使用Django 的約束框架[Django-doc]在數據庫端強制執行此操作:
from django.core.exceptions import ValidationError
from django.db.models import F, Q
class User(AbstractBaseUser, PermissionsMixin):
# …
def clean(self, *args, **kwargs):
if self.pk == self.referred_by_id:
raise ValidationError('Can not refer to itself!')
return super().clean(*args, **kwargs)
class Meta:
constraints = [
models.CheckConstraint(
check=~Q(pk=F('referred_by_id')),
name='age_gte_18'
)
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.