如何获取模型表格的数据?

时间:2019-02-18 07:57:14

标签: python django shell modelform

我正在构建用户模型,并希望将其附加到如下所示的模型表单中。如何通过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")

3 个答案:

答案 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

的原因