【问题标题】:django-nonrel exclude listfield from admindjango-nonrel 从管理员中排除列表字段
【发布时间】:2012-02-10 14:51:36
【问题描述】:

我遇到了一个典型的问题,即模型中有一个 ListField。

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

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

from django.contrib import admin

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

admin.site.register(Item, ItemAdmin)

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

【问题讨论】:

    标签: django mongodb pymongo django-nonrel


    【解决方案1】:

    我通过使我的 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)
    

    【讨论】:

      【解决方案2】:

      子类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

      【讨论】:

      • 乔纳斯,感谢您的回答伙伴。我对 Django 和 Python 还是很陌生。我应该在哪里定义这个 ListField 的子类?我在我自己的应用程序中的models.py中思考,以保持它独立。另外,当您说,从 formfield() 中返回 none 时,您的意思是它应该实现一个只返回 none 的 formfield() 方法吗?例如,我将如何返回嵌入对象的文本版本?谢谢兄弟
      • 是的,真的返回None。我在答案中添加了一些附加信息。
      • 乔纳斯再次感谢!我在这里感到困惑,在模型定义、字段定义和表单字段之间。所以我在这里要做的是 SubClass ListField 以便我可以打印(并最好保存)它包含的 EmbeddedObjectField 的实例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 2015-12-26
      • 2011-12-08
      相关资源
      最近更新 更多