2015-09-29 44 views
1

我有以下已過時代碼:從Django中的一個過時版本更新驗證模型

class samberos(User): 
    objects = UserManager() 
    backstage = models.BooleanField(default=False, help_text="Si el sambero esta activo, pero no tocando instrumentos ... ") 
    dni = models.CharField(max_length=10, blank=True, null=True) 
    phone = models.CharField(max_length=9, blank=True, null=True) 
    movil = models.CharField(max_length=9, blank=True, null=True, help_text="Este es el numero para los SMS") 
    instrumento = models.ForeignKey(instrumentos) 
    def url(self): 
      return u'<a href="/samberos/' + self.username + u'/" title="' + self.username + u'" rel="gb_page_center[400, 210]">' + self.username + u'</a>' 
    class Meta: 
      ordering = ['username'] 
      verbose_name_plural = "samberos" 
      verbose_name = "samberos" 

我想將它升級到Django的較新版本在這一刻,不支持和不想要失去用戶。我該怎麼做?

我現在運行的版本1.8,當我跑的服務器我得到了以下錯誤:

ERRORS: 
actuaciones.samberos.user_ptr: (fields.E301) Field defines a relation with the model 'auth.User', which has been swapped out. 
    HINT: Update the relation to point at 'settings.AUTH_USER_MODEL'. 

的Django版本用於創建此代碼爲1.2,並用1.4

+0

您要升級哪個版本的Django,以及上述代碼爲什麼不起作用? – Alasdair

+0

所以你似乎已經設置了AUTH_USER_MODEL來指向別的東西。如果你想讓這段代碼繼續工作,不要這樣做。 –

回答

0

工作正常在這種情況下,我強烈建議將這些字段遷移到UserProfile模型。

這是因爲django建議使用OneToOneFieldUser模型,而不是繼承它(這不僅會解決此問題,而且會設置標準,避免未來未知的問題)。

正如documentation about additional fields for users說:

If you’d like to store additional information related to your users, Django provides a method to specify a site-specific related model – termed a 「user profile」 – for this purpose.

當然,你需要一個data migration你的舊信息遷移到這種新的模式,但我可以向你保證,這將是值得保持同步與當前的標準。