Django:在管理表单之外使用ForeignKeyRawIdWidget

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django:在管理表单之外使用ForeignKeyRawIdWidget相关的知识,希望对你有一定的参考价值。

我试图找到一些如何在我自己的表单中使用ForeignKeyRawIdWidget的文档。目前我一直收到错误,“init()至少需要2个非关键字参数(给定1个)”,这对我没有任何意义。

非常感激任何的帮助。谷歌搜索这个很少但是开发对话并没有我能找到如何实现它的例子。

更新:这已解决;见下面的解决方案

答案

从Django 1.5开始,这可以在非管理表单中重用ForeignKeyRawIdWidget。

from django.contrib.admin.sites import site

class InvoiceForm(ModelForm):
    class Meta:
        model = Invoice
        widgets = {
            'customer': ForeignKeyRawIdWidget(Invoice._meta.get_field('customer').rel, site),
        }

更新

Django 2.0正在弃用field.rel,转而使用field.remote_field。你可能想要使用它(也适用于Django 1.11):

...
ForeignKeyRawIdWidget(Invoice._meta.get_field('customer').remote_field, site),
...
另一答案

这是源代码(django.contrib.admin.widgets):

class ForeignKeyRawIdWidget(forms.TextInput):
    """
    A Widget for displaying ForeignKeys in the "raw_id" interface rather than
    in a <select> box.
    """
    def __init__(self, rel, attrs=None):
        self.rel = rel
        super(ForeignKeyRawIdWidget, self).__init__(attrs)

    #.....

从剩下的代码中,我猜想rel是你模型的外键字段。有一次,代码检查self.rel.limit_choices_to,这个属性(limit_choices_to)只能在ForgeinKey字段上设置。

以上是关于Django:在管理表单之外使用ForeignKeyRawIdWidget的主要内容,如果未能解决你的问题,请参考以下文章

为我的应用程序之外的单个模型覆盖 django 管理员更改表单?

如何在 django 表单中包含 id 字段?

Django - 从 Django 模板访问外键管理器

在管理站点之外重用 Django 变更列表

在 Django 中自定义管理表单,同时使用自动发现

如何在自定义页面 Django 中使用管理表单