10

我正在尝试查找一些有关如何在我自己的表单中使用 ForeignKeyRawIdWidget 的文档。目前我不断收到错误消息,“ init () 至少需要 2 个非关键字参数(给定 1 个)”,它什么也没告诉我。

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

更新:这已解决;请参阅下面的解决方案。

4

2 回答 2

9

从 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),
...
于 2013-09-06T19:41:07.973 回答
0

这是来自源代码(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字段上设置。

于 2010-02-16T09:20:01.427 回答