无法在Django模型中获取对象

时间:2011-05-10 17:53:47

标签: django django-models

我有一个用户提交表单,用户提供他的姓名和电子邮件。每封电子邮件都与网络相关联(由管理员在用户注册之前),并根据用户的电子邮件将其分配给该网络。

这就是models.py的样子 -

class Network(models.Model):
    network = models.CharField(max_length=50)
    location = models.CharField(max_length=50)

class EmailList(models.Model):
    email = models.EmailField(blank=True)
    network = models.CharField(max_length=50)

class User(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField(max_length=50)
    network = models.ForeignKey(Network)       

views.py这是我用来尝试将记录插入数据库的内容 -

User.objects.create(
name = cd['name']
email=cd['email'],
network= EmailList.objects.filter(email=request.POST.get('email'))['network'])

但是,我从network=行获得了异常TypeError。这里的语法应该是什么?“拉”并将与电子邮件关联的网络插入数据库?我做错了什么

更新

以下是我在views.py中使用的代码,以使其正常运行。

email_list = EmailList.objects.get(email=cd['email'])
network= Network.objects.get(network=email_list.network)
User.objects.create(
    name=cd['name'], 
    email=cd['email'], 
    network=network)

当我尝试设置变量email = cd['email']然后使用该变量定义email_list - email_list = EmailList.objects.get(email=email)时,它会引发一个异常,说在EmailList中找不到Queryset并且会传递一个unicode字符串。

为什么在这种情况下传递它之前定义变量会创建一个unicode字符串,而直接传递表达式却不是?

1 个答案:

答案 0 :(得分:3)

再次,您不应该直接使用帖子数据。

Filter返回一个查询集而不是一个实例。这看起来像什么导致你的问题。 您还需要获取网络实例而不是字符串以设置为User.network:

如果EmailList的电子邮件和网络模型的网络是唯一的,您可以执行以下操作,如果没有,并且使用get有多个条目将引发错误。

name = cd.get('name')
email = cd.get('email')
email_list = EmailList.objects.get(email=email)
network = Network.objects.get(network=email_list.network)

User.object.create(name=name, email=email, network=network)