2012-02-20 86 views
1

我正在访问电子邮件服务器中的电子邮件,获取每封电子邮件的正文,然后应用正则表达式来查找填充我的Django模型所需的数据。Django模型ValueError

这一切都工作正常,除了一个领域,作为外键链接到另一个模型领域。尽管在我的电子邮件是一样的一个在我的其他型号上市,失败值....

错误:

ValueError: Cannot assign "'Humanities'": "Subject.faculty" must be a "Faculty" instance. 

例如,假设每个学校科目必须是一部分的教师。当通过表单填充数据库时,对于主题的教师领域,我将菜单下拉到教师值/实例列表中,因为在我的模型中定义了外键关系,例如我可以从人文科学,艺术,设计技术等

但是,当我在我的电子邮件中找到值'Humanities',并尝试将其添加到数据库模型,我得到上述错误。

有人对此有所了解吗?我是不是傻还是比一个ValueError为我多,该值是相同的在这两种情况下

谢谢

更多的代码的要求:

class Faculty(models.Model): 
    name = models.CharField(primary_key=True, max_length=50) 
    leader = models.CharField(max_length=50) 
    email = models.EmailField() 
    mailing_list = models.ManyToManyField("Contact", null=True) 

class Subject(models.Model): 
    name = models.CharField(max_length=50) 
    faculty = models.ForeignKey(Faculty, to_field="name") 
    faculty_head = models.CharField(max_length=50) 
+2

让我们看看你的模型和一些代码! – 2012-02-20 15:39:48

+0

现在就把它搁置:) – dannymilsom 2012-02-20 15:42:04

+0

请尝试在shell中重现问题(./manage.py shell - 不要忘记安装ipython以获得更好的shell),然后在主题 – jpic 2012-02-20 15:51:41

回答

1

这听起来像你正在尝试一个字符串“王汝辉,幸岭”分配给ForeignKey关系。这没有意义。您需要查找或创建名称为“Humanities”的实际Faculty对象,并将其分配给Subject。像这样的事情在您的视图(取决于你的表格是如何设置):

if form.is_valid(): 
    faculty_str = form.cleaned_data['faculty'] 
    (faculty, was_created) = Faculty.objects.get_or_create(name=faculty_str, ...) 
    # It's hard to tell if you are using a ModelForm or just a normal Form. Anyway, assume we already have access to the Subject object 
    subject.faculty = faculty 
    subject.save() 

get_or_create()

+0

因此,不是简单地提供值,而是必须找到并直接引用我的数据库中已经存在的Faculty对象?确切地说,是 – dannymilsom 2012-02-20 15:59:37

+0

。将'Faculty'的实例(从DB创建或检索)分配给'subject.faculty'字段,然后用'subject.save()'将这些修改保存回数据库。 – 2012-02-20 16:02:40

+0

我认为这可能是正确的方向,但只是为了澄清我可以通过表单填充模型,这是我得到的价值观后,我应用正则表达式的电子邮件,然后尝试和填充模型,给我麻烦 – dannymilsom 2012-02-20 16:03:22

0

你的价值是“人文“也许你的意思是寻找人文(不含引号)。

+0

中发布shell会话是的,我确实这样想,但我不明白''是如何到达那里的,因为它不是在引号中的电子邮件地址 – dannymilsom 2012-02-20 15:48:19

+0

当我提交并将它们保存到模型之前打印这些值时,为什么我很困惑 – dannymilsom 2012-02-20 15:52:07

0

您需要先创建一个Faculty实例。

faculty = Faculty(name='', leader='', email='') 
faculty.save() 

subject.faculty = faculty 
subject.save() 
+0

添加了我的模型。 Humanitites系已经存在于我的模型中,这就是为什么我很惊讶我得到了我所做的错误 - 因为具有相同值的Faculty实例已经存在 – dannymilsom 2012-02-20 15:54:56