我正在构建用户模型,并希望将其附加到如下所示的模型表单中。如何通过shell访问mysql数据库获取每个用户的电子邮件?
我已经尝试过使用这些命令通过shell获取数据,但是前一个表示该对象没有电子邮件属性,而后一个表示form.py没有对象。
from Project.User.models import UserProfile as p
p.objects.filter(is_active=True).first().email //
from Project.User.forms import ClientProfileForm as p
p.objects.filter(is_active=True).first().email
代码:
models.py:
class UserProfile(BaseModel):
user = models.OneToOneField(User, primary_key=True, on_delete=models.CASCADE, verbose_name='client')
name = models.CharField('name',max_length=30, null=False, help_text="Name")
gender = models.CharField('sex',max_length=1, help_text="Sex")
class Meta:
verbose_name = 'Client'
verbose_name_plural = 'Client'
def __str__(self):
return 'client:%s' % self.user
forms.py:
class ClientProfileForm(forms.ModelForm):
email = forms.EmailField()
class Meta:
model = UserProfile
fields = ("user", "name", "gender")
答案 0 :(得分:2)
您尝试过使用
p.objects.filter(is_active=True).first().user.email
答案 1 :(得分:1)
在将数据发送给表单之前,表单中没有数据,因此您无法从外壳获取用户及其电子邮件。
例如,表单用于从HTML模板获取数据并验证该数据,然后将这些数据添加到数据库中。
如果您填写表格,则可以这样访问已从视图中清除的数据:
form = ClientProfileForm(request.POST)
if form.is_valid():
print(form.cleaned_data['my_form_field_name'])
还可以为表单设置一些默认值。此处的示例:
Django forms initial example on stackoverflow
最后是您的问题:
您正试图从UserProfile
访问电子邮件,该电子邮件没有电子邮件字段,但User
模型却有。
因此您可以像这样访问电子邮件:
from Project.User.models import UserProfile as p
# Get the first profile and then get the email from user model
p.objects.filter(is_active=True).first().user.email
答案 2 :(得分:-1)
from Project.User.forms import UserProfile as p
此行不正确,因为您的表单名称是ClientProfileForm
而不是UserProfile
。这就是为什么出现错误forms.py has no object