我遇到了一个典型的问题,我在模型中有一个ListField。
我想使用Django管理员来玩这个对象而ListField并不是那么重要,它是一个我可以不用的嵌入对象列表。
当我使用它时,我在主管理页面上收到错误。如果我在注册原始Item对象时不使用ModelAdmin对象,则只有在尝试添加Item时才会出现错误。
from django.contrib import admin
class ItemAdmin(admin.ModelAdmin):
exclude = ('bids',)
admin.site.register(Item, ItemAdmin)
如何正确排除“出价”ListField呢?
答案 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
。