django-nonrel 从管理中排除列表字段

发布于 2024-12-27 04:56:43 字数 382 浏览 1 评论 0原文

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

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

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

from django.contrib import admin

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

admin.site.register(Item, ItemAdmin)

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

I've ran into a typical problem where I have a ListField in a model.

I'd like to use the Django admin to play around with the object and the ListField isn't that crucial, it's a list of embedded objects that I can live without.

When I use this, I get the error on the main admin page. If I don't use the ModelAdmin object when registering the original Item object, I only get the error if I try to add an Item.

from django.contrib import admin

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

admin.site.register(Item, ItemAdmin)

How to properly exclude the "bids" ListField then?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

星光不落少年眉 2025-01-03 04:56:43

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

I worked round it by making my ListField non editable, as I couldnt get exclude to work for me either..

eg:

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)
肩上的翅膀 2025-01-03 04:56:43

子类 ListField 并重写 formfield 以便它返回 None

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

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

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

将其从管理中排除,您仍然可以使用排除

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

将您的字段子类放入 yourapp/fields.py 中。

Subclass ListField and override formfield so that it returns None.

Returning None from formfield(...) means that the field should be excluded from all forms, so you need remove the exclude = ['bids'] thing from your ModelAdmin.

Alternatively, you can make formfield(...) return a proper forms.Field subclass -- to display e.g. a text version, use something like

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

To exclude it from the admin, you can still use exclude.

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

Put your field subclass into yourapp/fields.py.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文