django-nonrel从admin中排除listfield

时间:2012-01-15 01:30:55

标签: django mongodb pymongo 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呢?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

子类ListField并覆盖formfield,以便它返回None

None返回formfield(...)表示该字段应从所有表单中排除,因此您需要从exclude = ['bids']中删除ModelAdmin内容。

或者,您可以让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