Created
January 29, 2010 22:34
-
-
Save mrts/290224 to your computer and use it in GitHub Desktop.
Use raw_id_fields widget in custom ModelForm
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.contrib.admin import widgets | |
from django import forms | |
from django.contrib import admin | |
# create wrappers for overriding the queryset | |
class ToWrapper(object): | |
def __init__(self, to, manager): | |
self.to = to | |
self._default_manager = manager | |
def __getattr__(self, name): | |
return getattr(self.to, name) | |
class RelWrapper(object): | |
def __init__(self, rel, manager): | |
self.rel = rel | |
self.to = ToWrapper(rel.to, manager) | |
def __getattr__(self, name): | |
return getattr(self.rel, name) | |
class FooForm(forms.ModelForm): | |
bar = forms.ModelChoiceField(queryset=Bar.all_objects, | |
label=_("Bar"), | |
widget=widgets.ForeignKeyRawIdWidget( | |
RelWrapper(Foo._meta.get_field('bar').rel, | |
Bar.all_objects))) | |
class Meta: | |
model = Foo | |
class FooAdmin(admin.ModelAdmin): | |
form = FooForm |
For Django>=2.0 you should use remote_field
instead of rel
.
Since Django 1.5
+, the ForeignKeyRawIdWidget
require a site
variable, which site should I pass to this object (foo or bar) and do you know if it's possible to use ForeignKeyRawIdWidget
in a regular forms.Form
?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I'm using Django 1.6 and the follow seems to work fine:
And my ModelAdmin
get_form
returns MyCustomForm.