Django: использование ForeignKeyRawIdWidget вне форм администратора - PullRequest
8 голосов
/ 16 февраля 2010

Я пытаюсь найти документацию о том, как использовать ForeignKeyRawIdWidget в моих собственных формах. В настоящее время я получаю сообщение об ошибке: « init () принимает как минимум 2 аргумента без ключевых слов (1 задано)», что ничего не говорит.

Любая помощь будет наиболее ценной. Погуглив, это приводит к небольшим разговорам разработчиков, и я не могу найти примеров того, как это реализовать.

Обновление : это решено; см. решение ниже.

Ответы [ 2 ]

8 голосов
/ 06 сентября 2013

Начиная с 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),
...
0 голосов
/ 16 февраля 2010

Это из исходного кода (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.

...