2012-02-20 111 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