如何创建个性化的Django管理员模型?

2 投票
1 回答
2143 浏览
提问于 2025-04-16 09:14

我正在写一个Django应用程序,我需要创建一个个性化的管理模型,这样在管理界面创建新对象时,只能显示特定的项目。

我在admin.py里写了这段代码:

from django import forms
from myapp.models import *
from django.contrib import admin

class SimAdmin(admin.ModelAdmin):
    phone = forms.ModelChoiceField(queryset=Item.objects.filter(name='phone'))
    fields = ('phone', 'num_phone', 'pin', 'puk')

admin.site.register(Item)
admin.site.register(Sim, SimAdmin)
...

问题是,当我登录到管理网站时,我的SimAdmin没有出现。Django在这段代码里没有给我任何错误提示,但如果我只写了

...
admin.site.register(SimAdmin)
...

就会出现一个

类型错误:'MediaDefiningClass'对象 不能被迭代

的错误,出现在这一行。

我在网上和文档里搜索了这个错误,但没有找到任何与我具体问题相关的信息。我觉得解决方案应该很简单,但我看不出来。有人能帮我吗?

谢谢!

1 个回答

3

这个说法是不对的:

class SimAdmin(admin.ModelAdmin):
    phone = forms.ModelChoiceField(queryset=Item.objects.filter(name='phone'))

你试图把 forms.Field 连接到 admin.ModelAdmin,这样是行不通的。

看看怎么正确实现这个功能:http://docs.djangoproject.com/en/1.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_manytomany

撰写回答