我怎样才能得到模型的数据?

How can I get the data of the modelform?

我正在构建一个用户模型,并想将其附加到如下所示的模型表单。如何通过 shell 访问 mysql 数据库来获取每个用户的电子邮件?

我试过这些通过shell获取数据,但前一个说对象没有电子邮件属性,后一个说forms.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")

您尝试过使用

p.objects.filter(is_active=True).first().user.email

from Project.User.forms import UserProfile as p

此行不正确,因为您的表单名称是 ClientProfileForm 而不是 UserProfile。这就是您收到错误 forms.py has no object

的原因

在您向其发送数据之前,表单中没有数据,因此您无法获取用户,并且它是来自您 shell 的电子邮件。

例如,表单用于从 HTML 模板获取数据并验证该数据,然后将这些数据添加到数据库中。

如果您填写表格,您可以像这样访问已从您的视图中清除的数据:

form = ClientProfileForm(request.POST)
if form.is_valid():
    print(form.cleaned_data['my_form_field_name'])

您还可以为表单设置一些默认值。此处示例:

Django forms initial example on Whosebug

最后是你的问题:

您正在尝试访问来自 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