2012-01-15 88 views
0

我遇到了一个典型的问题,我在模型中有一个ListField。django-nonrel从管理中排除listfield

我想使用Django管理员来玩弄对象,并且ListField不是那么重要,它是我可以不用的一个嵌入对象的列表。

当我使用这个,我得到主管理页面上的错误。如果我在注册原始Item对象时没有使用ModelAdmin对象,则只有在尝试添加Item时才会出现错误。

from django.contrib import admin 

class ItemAdmin(admin.ModelAdmin): 
    exclude = ('bids',) 

admin.site.register(Item, ItemAdmin) 

如何正确排除“出价”ListField呢?

回答

1

子类ListField并覆盖formfield使其返回None

formfield(...)返回None意味着该字段应该从所有表格中排除,因此您需要从ModelAdmin中删除exclude = ['bids']的东西。

或者,您可以使formfield(...)返回适当的forms.Field子类 - 以显示例如文本版本,使用类似

class Item(models.Model): 
    def formfield(self, **kwargs): 
     return super(Item, self).formfield(form_class=YourCustomFormField, **kwargs) 

要从管理员中排除它,仍然可以使用exclude

https://docs.djangoproject.com/en/dev/howto/custom-model-fields/#django.db.models.Field.formfield

把你的子场到yourapp/fields.py

+0

乔纳斯,谢谢您的回答伴侣。我对Django和Python仍然很陌生。我应该在哪里定义这个ListField的子类?我在自己的应用程序中思考我的models.py,以保持独立。 当你说,从formfield()返回没有你的意思是它应该实现一个formfield()方法,只是返回没有?例如,我将如何去返回我的嵌入式对象的文本版本? 谢谢bro – holografix 2012-01-16 09:38:21

+0

是的,真的返回'没有'。我添加了一些额外的信息给我的答案。 – 2012-01-16 10:43:29

+0

乔纳斯再次感谢!在模型定义,字段定义和FormField之间,我在这里感到困惑。所以我在这里要做的是SubClass ListField,这样我就可以打印(并理想地保存)它包含的EmbeddedObjectField的实例。 – holografix 2012-01-16 12:18:48

3

我曾绕着它通过使我ListField不可编辑,因为我不可能得到exclude为我无论工作..

如:

class Item(models.Model): 
    created_at = models.DateTimeField(auto_now_add=True, db_index=True) 
    title = models.CharField(max_length=255) 
    bids = ListField(EmbeddedModelField('Bid'), editable=False) 
相关问题