3

我使用通用外鍵與從auth.User繼承了我Users模型涉及不同的配置文件。我不能做dumpdata雖與--natural選項傳遞。它說,Django的:通用外鍵dumpdata:無法解析相關

錯誤:無法解析myproject.AdminProfile,myproject.TeacherProfile,myproject.Users在序列化應用程序列表中的依賴關係。

根據documentation,據說我們需要執行natural_key methods來取和涉及泛型關係的閃存燈具。我怎麼能用我在這裏介紹的模型來做到這一點?

class Users(User): 
    location = models.TextField('Location', blank=True) 
    created_by = models.ForeignKey('self', null=True, blank=True, related_name='created_by_user') 

    # Generic foreign key setup to hold the extra attributes 
    profile_contenttype = models.ForeignKey(ContentType, null=True, blank=True) 
    profile_object_id = models.PositiveIntegerField('Extra ID', null=True, blank=True) 
    profile_object = generic.GenericForeignKey('profile_contenttype', 'profile_object_id') 


class AdminProfile(models.Model): 
    organization = models.CharField('Organization', max_length=100) 

    # profile reverse relation to get the user 
    users_link = generic.GenericRelation('Users', content_type_field='profile_contenttype', 
             object_id_field='profile_object_id') 

class TeacherProfile(models.Model): 
    designation = models.CharField('Designation', max_length=100) 

    # profile reverse to get the user 
    users_link = generic.GenericRelation('Users', content_type_field='profile_contenttype', 
             object_id_field='profile_object_id') 

使用Django 1.4.3和Postrgres。

回答

6

你的問題似乎無關缺乏天然關鍵方法。我使用SQLite在Django 1.4和1.2.5上原樣測試了您的[原始]代碼,並且能夠使用自然鍵無錯地轉儲數據。

經過一番搜索,我發現這個問題時,有模型之間循環依賴(包括自參考模型)出現。如更新後的代碼所示,Users模型中有一個自我參考,所以這就是問題所在。此錯誤是在Django 1.3引入,儘管是already fixed,它仍然無法AFAIK的穩定版本(測試可達1.4.3)。然而,在測試版本(1.5b2)中,你的代碼工作正常。

如果使用的是測試版(或降級到1.2)是不是一種選擇,那麼你唯一的解決辦法可能是確實創造另一種模式。例如:

class CreatedBy(models.Model): 
    creator = models.ForeignKey(Users, related_name="created_by_user") 
    created = models.ForeignKey(Users, unique=True, related_name="created_by") 
+0

*我發現當模型(包括具有自引用的模型)*之間存在循環依賴關係時,會出現此問題。謝謝(你的)信息。其實我有一個自我參考的領域。對不起,第一次沒有添加(現在檢查編輯)。當我刪除它時,我可以獲得轉儲。但無論如何我需要這個領域。那可能嗎?或者我必須創建另一個模型來保持這種興趣? – Babu

+1

@Babu就是這樣!檢查我更新的答案。你的代碼在1.2.5和1.5b2(這個bug已經被修復)中工作正常,但是在1.4中沒有(我假設在1.3中)。 – mgibsonbr

+0

感謝您的詳細解答和多版本測試結果。 :)我會去創建另一個模型。這很奇怪,可惜它在1.4中不固定。 – Babu