删除Django Admin中的特定伪造密钥?

删除Django Admin中的特定伪造密钥?,django,django-models,django-admin,Django,Django Models,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.BooleanFi

我有以下两种型号

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']}),
    ]
我的目标是筛选出
处于活动状态
False
的ModelOne条目。但是,上面的代码返回一个错误-第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>
Django版本:1.4 异常类型:KeyError 异常值: “在表单中找不到键'modone'” 异常位置:c:\Python\Python2.7\App\lib\site packages\django\forms\forms.py,位于第109行的\uuuuu getitem\uuuuuu 1. 2{%if fieldset.name%}{{fieldset.name}{%endif%} 3{%if fieldset.description%} 4{{fieldset.description | safe}} 5{%endif%} 6{字段集%中的行的百分比} **7 ** 8{%if line.fields|length_为:'1'%}{{line.errors}}{%endif%} 9{第%行中的字段为%1} 10 11{%if not line.fields{124; length_是:'1'而不是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{field.contents}


如何过滤掉非活动的
ModelOne
s

问题是您两次指定了
None
字段集。第二个字段覆盖第一个字段,因此表单中唯一的字段是
处于活动状态。为第二个
None
指定一个实际的字符串名称,或者将两个字段集合并为一个。

foreignkey方法的
formfield\u中缺少return语句。返回语句应为:

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

我尝试过(并编辑了我的答案以反映我的尝试)。错误根本没有改变。您使用的是
runserver
还是其他Web服务器?此时您的代码似乎没有任何问题。尝试退出运行服务器,然后重新启动它。您还可以尝试删除那里的
admin.pyc
文件。关闭所有缓存(如果尚未设置缓存后端,则将其设置为DummyCache)。哦!忘记了返回语句:
returnsuper(ModelTwo,self)。formfield\u用于foreignkey(db\u字段,request,**kwargs)
Sheesh。而且,我也没有注意到。总是一些小事。把它作为一个答案,尽可能地接受它。