2015-04-22 57 views
1

我在Django admin中遇到了一個非常奇怪的行爲。我有這樣的模型定義:Django Admin DataError:值太長,類型字符變化(150)

class WebPublication(DatesInfo): 
    title = models.CharField(max_length=200) 
    class Meta: 
     abstract = True 

class WebArticle(MsnPublication): 
    pass 

而下面的表格和管理代碼:

class WebArticleForm(forms.ModelForm): 
    title = forms.CharField(max_length=150) 

class WebPublicationAdmin(admin.ModelAdmin): 
    def some_method(self, obj): 
     return 'Hello!' 

class WebArticleAdmin(WebPublicationAdmin): 
    form = MsnArticleForm 
    list_display = ('title', 'author', 'pub_date', 'preview_link') 

admin.site.register(MsnArticle, MsnArticleAdmin) 

這是非常標準的,這就是爲什麼我說我覺得這個陌生的,並嘗試給予儘可能多的細節可能。

正如你所看到的,WebPublicationvarchar爲200的最大長度,這可以在表中說明(PostgreSQL的方式)來證實:

 Column  |   Type   |  Modifiers 
-------------------+--------------------------+------------------- 
title    | character varying(200) | not null 

不過,我得到了來自例外以下Django管理員,當我嘗試編輯title字段。我做了150個字符,這是輸入字段根據WebPublicationAdmin(這是預期的)的定義所允許的最大值。

DataError: value too long for type character varying(150) 

請注意錯誤消息如何不反映模型的當前狀態。 (我跑了一次遷移並且成功了,因爲PostgreSQL是這麼說的。)

這裏有什麼可能是錯誤的?

回答

0

你的問題是你在這裏覆蓋標題的max_length爲150;

class WebArticleForm(forms.ModelForm): 
    title = forms.CharField(max_length=150) 

管理員正在使用此表單驗證數據。只需更改150 - > 200.

+0

這並不是我所害怕的。 – romeroqj

0

事實證明,錯誤來自不同的字段。錯誤不是描述性的,它不能說明哪個字段違反了長度約束。如果有人遇到同樣的問題,請嘗試檢查模型的所有字段。

相關問題