我有一个用户提交表单,用户提供他的姓名和电子邮件。每封电子邮件都与网络相关联(由管理员在用户注册之前),并根据用户的电子邮件将其分配给该网络。
这就是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字符串,而直接传递表达式却不是?
答案 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)