2012-08-08 4 views
0

나는 내 목표는 is_activeFalse입니다 ModelOne 항목을 필터링하는 것입니다 ModelTwoAdmin장고 관리자에서 특정 forgein 키를 제거 하시겠습니까?

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']}), 
    ] 

에 대해 다음 두 가지 모델

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) 

다음과 같은 관리 코드가 있습니다.

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의를 필터링 할 수 있습니다 : 라인 7은 스택 추적에 있지만 여기 **로 둘러싸여 코드 블록으로 표시됩니다 - 단, 위의 코드는 오류를 반환?

답변

1

formfield_for_foreignkey 메서드에서 return 문이 누락되었습니다. return 문은 다음과 같아야합니다.

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

문제는 None 필드 세트를 두 번 지정했기 때문입니다. 두 번째 것은 첫번째를 오버라이드하므로 양식의 유일한 필드는 is_active입니다. 두 번째 None에 실제 문자열 이름을 지정하거나 두 필드 집합을 하나로 결합하십시오.

+0

시도해 보았습니다. (시도한 내용을 반영하여 답변을 편집했습니다.) 오류는 전혀 변하지 않았습니다. – Andy

+0

'runserver' 또는 다른 웹 서버를 사용하고 있습니까? –

+0

'runserver'를 실행 중입니다 – Andy

관련 문제