我正在访问我的电子邮件服务器中的电子邮件,获取每封电子邮件的正文,然后应用正则表达式来查找填充我的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)
答案 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()
答案 1 :(得分:0)
你的价值是'人文',也许你的意思是搜索人文学科(没有引号)。
答案 2 :(得分:0)
您需要先创建一个Faculty实例。
faculty = Faculty(name='', leader='', email='')
faculty.save()
subject.faculty = faculty
subject.save()