2012-08-08 13 views
0

我有以下兩種模式在Django Admin中刪除特定的僞造密鑰?

class ModelOne(models.Model): 
    mod_desc = models.CharField(max_length=25) 
    is_active = models.BooleanField(default=True) 

class ModelTwo(models.Model): 
    another_desc = models.CharField(max_length=25) 
    is_active = models.BooleanField(default=True) 
    modone = models.ForeignKey(ModelOne) 

而下面的管理員密碼爲ModelTwoAdmin

class ModelTwoAdmin(admin.ModelAdmin): 
    def formfield_for_foreignkey(self,db_field,request, **kwargs): 
     if db_field.name == 'modone': 
      kwargs['queryset'] = ModelOne.objects.exclude(is_active=False) 

    fieldsets = [ 
     ('String 1', {'fields' : ['another_desc','modone']}), 
     ('String 2', {'fields' : ['is_active']}), 
    ] 

我的目標是過濾掉ModelOne項,其中is_activeFalse。然而,上面的代碼返回一個錯誤 - 7行的堆棧跟蹤,但在代碼塊這裏被包圍**被突出顯示:

Django Version:  1.4 
Exception Type:  KeyError 
Exception Value:  

"Key 'modone' not found in Form" 

Exception Location:  c:\Python\Python2.7\App\lib\site-packages\django\forms\forms.py in __getitem__, line 109 

1 <fieldset class="module aligned {{ fieldset.classes }}"> 
2 {% if fieldset.name %}<h2>{{ fieldset.name }}</h2>{% endif %} 
3 {% if fieldset.description %} 
4 <div class="description">{{ fieldset.description|safe }}</div> 
5 {% endif %} 
6 {% for line in fieldset %} 
**7  <div class="form-row{% if line.fields|length_is:'1' and line.errors %} errors{% endif %}{% for field in line %}{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% endfor %}">** 
8 {% if line.fields|length_is:'1' %}{{ line.errors }}{% endif %} 
9 {% for field in line %} 
10 <div{% if not line.fields|length_is:'1' %} class="field-box{% if field.field.name %} field-{{ field.field.name }}{% endif %}{% if not field.is_readonly and field.errors %} errors{% endif %}"{% endif %}> 
11 {% if not line.fields|length_is:'1' and not field.is_readonly %}{{ field.errors }}{% endif %} 
12 {% if field.is_checkbox %} 
13 {{ field.field }}{{ field.label_tag }} 
14 {% else %} 
15 {{ field.label_tag }} 
16 {% if field.is_readonly %} 
17 <p>{{ field.contents }}</p> 

我怎樣可以過濾掉無效ModelOne S'

回答

1

formfield_for_foreignkey方法中缺少return語句。退貨聲明應該是:

return super(ModelTwo, self).formfield_for_foreignkey(db_field, request, **kwargs) 
1

問題是您指定了一個None fieldset兩次。第二個覆蓋第一個,因此您表單中唯一的字段是is_active。給第二個None一個實際的字符串名稱,或者將這兩個字段集合成一個。

+0

我試過了(並且編輯了我的答案以反映我所嘗試的)。錯誤完全沒有改變。 – Andy 2012-08-08 15:23:02

+0

你使用'runserver'或其他網絡服務器嗎? – 2012-08-08 15:27:04

+0

我正在運行'runserver' – Andy 2012-08-08 15:29:53