Fix Django 1.4 admin_site ForeignKeyRawIdWidget issue
If you want use field widget from Django 1.3 in Django 1.4 you need patch it
Django Version: 1.4
Exception Type: TypeError
Exception Value: __init__() takes at least 3 arguments (3 given)
Exception Location: widgets.py in __init__, line 60
super(Widget, self).__init__(*args, **kwargs)
The signature for ForeignKeyRawIdWidget.__init__() in Django 1.4 is:
class ForeignKeyRawIdWidget(forms.TextInput):
def __init__(self, rel, admin_site, attrs=None, using=None):
The required argument admin_site is new to Django 1.4. The formfield method in your field doesn’t include the admin_site argument:
def formfield(self, *args, **kwargs):
kwargs['widget'] = Widget(self.rel)
return super(Model, self).formfield(*args, **kwargs)
This patch inspects the arguments of ForeignKeyRawIdWidget.__init__() to see if admin_site is a required argument and patches it into the __init__ kwargs for your Widget. If admin_site is required it uses django.contrib.admin.sites.site as the value.
class Widget(ForeignKeyRawIdWidget):
def __init__(self, *args, **kwargs):
if 'admin_site' in inspect.getargspec(ForeignKeyRawIdWidget.__init__)[0]: # Django 1.4
kwargs['admin_site'] = site
self.field_name = kwargs.pop('field_name')
super(Widget, self).__init__(*args, **kwargs)
Читайте також:
- How to expire session on browser close in django
- Django mongoengine cache backend
- Django defer, only
- Ordering related objects in Django
- MemcachedKeyLengthError: Key length is > 250
- Retrieving elements in a specific order in django
- Use custom admin filters in ModelAdmin
- мультимовність djnago
- django-stdimage traceback "The '%s' attribute has no file associated with it"
- Django yandex and google maps integration