我正在使用PyCharm 4.5.2,Django 1.8.2。Callable not defined for django.db.models field default
如果我定義一個類爲:
class User(models.Model):
first_name = models.CharField(max_length=256)
last_name = models.CharField(max_length=256)
slug = models.SlugField(max_length=256, unique=True, default=make_slug)
def make_slug(self):
return self.first_name + self.last_name[0]
IDE高亮顯示default=make_slug
與make_slug
是不確定的。解釋者同意,當開發服務器嘗試刷新時,它退出狀態1
和錯誤NameError: name 'make_slug' is not defined.
因爲它只是一個可調用的名稱,所以我無法傳遞參數。所以,如果我在類之外定義函數(移入更高範圍並被定義),我不能使用類屬性。我看過一些建議使用lambda表達式但從Django documentation這是錯誤的:
注意lambda表達式不能用於諸如默認 領域的選擇,因爲他們不能被遷移序列化。請參閱 文檔瞭解其他注意事項。
定義模型中默認值的可調用方法的正確方法是什麼?
嘗試在屬性之前移動'make_slug'的定義,即剛剛在'first_name = ...'之上# – Pynchia
@Pynchia試過並且另一個問題漸漸出現。 'makemigrations'和'migrate'任務可以工作,但是當我在管理面板中添加一個用戶時,我得到一個'TypeError':'make_slug()缺少1個必需的位置參數:'self''。從方法中刪除'self'參數會取消類屬性,並給出另一個'必須接受一個參數,通常是自我警告。 – ToothlessRebel
好的。你在下面得到了答案。順便說一句:你爲什麼重新定義用戶類?考慮使用一對一的關係,它使生活[更簡單](https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#extending-the-existing-user-model)(at至少對我來說) – Pynchia