Django Model ValueError

时间:2012-02-20 15:31:04

标签: database django email models

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

这一切都正常,除了一个字段,它作为外键链接到另一个模型字段。尽管我的电子邮件中的值与我在其他模型中列出的值相同,但它失败了......

错误:

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

例如,假设每个学校科目都必须是教师的一部分。当通过表单填充数据库时,对于Subject的教师字段,我将菜单下拉到教师值/实例列表,因为我的模型中定义了外键关系,即我可以选择Humanities,Art,设计技术等

但是当我在电子邮件中找到值'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)

3 个答案:

答案 0 :(得分:1)

听起来您正在尝试将字符串“Humantities”分配给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()

答案 1 :(得分:0)

你的价值是'人文',也许你的意思是搜索人文学科(没有引号)。

答案 2 :(得分:0)

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

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

subject.faculty = faculty
subject.save()