【发布时间】:2016-08-08 19:13:41
【问题描述】:
我在我的forms.py中这个
from django.contrib.auth.models import User
from .models import DirectReferral, IndirectReferral
class RegistrationForm(forms.Form):
username = forms.RegexField()
referrer = forms.CharField()
def clean_username(self):
try:
user = User.objects.get(username__iexact=self.cleaned_data['username'])
except User.DoesNotExist:
return self.cleaned_data['username']
raise forms.ValidationError(_("The username already exists."))
如何检查用户数据库中是否存在引用实例?
我做了下面的代码,但它有一个错误TypeError at /register/
def clean_referrer(self):
try:
user = User.objects.get(username__iexact=self.cleaned_data['referrer'])
except User.DoesNotExist:
raise forms.ValidationError(_("User does not exist."))
return self.cleaned_data['referrer']
我也尝试过这样做,但我收到了string indices must be integers 的错误。
def clean(self):
if 'referrer' in self.cleaned_data:
if User.objects.filter(username=self.cleaned_data['referrer']).exists():
return self.cleaned_data['referrer']
else:
raise forms.ValidationError(_("Referrer doesn't exist!"))
这是我的models.py
from django.contrib.auth.models import User
class DirectReferral(models.Model):
name = models.OneToOneField(User, primary_key=True)
referrer = models.ForeignKey(User, related_name="direct_referrals")
def __str__(self):
return self.name.username
class IndirectReferral(models.Model):
name = models.OneToOneField(User, primary_key=True)
referrer = models.ForeignKey(User, related_name="indirect_referrals")
def __str__(self):
return self.name.username
如何获取引荐来源实例数据?
这是我的views.py(更新)
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
user = User.objects.create_user(
username=form.cleaned_data['username']
)
ref_user = User.objects.get(
username=form.cleaned_data['referrer'])
direct = DirectReferral.objects.create(
name = user,
referrer = ref_user
)
if DirectReferral.objects.filter(referrer=user).exists():
indirect = IndirectReferral.objects.create(
name = user,
referrer = ref_user
)
return HttpResponseRedirect('/register/success/')
【问题讨论】:
-
define: "问题是 get_directreferral 和 get_indirectreferral 都不起作用"
-
您的问题不够清楚。但我猜你想要的是将
if self.cleaned_data['referrer'] in User.objects.all():替换为if User.objects.filter(username=self.cleaned_data['referrer']).exists() -
@e4c5 on
clean_username当用户注册时,用户在 Django Admin 中被添加到用户,但它没有添加到我的模型中。 -
感谢您的澄清,但恐怕它并没有让事情变得更清楚。当您说添加到模型时,您的意思是模型实例的记录不会出现在数据库中吗?
-
@e4c5 模型实例出现在数据库中,但问题是当用户成功注册时,只有用户名保存在用户数据库中。我想要的是将用户名和推荐人都添加到 DirectReferral 和 IndirectReferral 数据库。