#21528 closed Cleanup/optimization (fixed)
improve Django Doc with an example for formfield_for_foreignkey accessing parent ID
Reported by: | anonymous | Owned by: | Caio Ariede |
---|---|---|---|
Component: | Documentation | Version: | dev |
Severity: | Normal | Keywords: | |
Cc: | Triage Stage: | Ready for checkin | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Please,
Could you add an example for formfield_for_foreignkey (
https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey) showing how to access parent ID for filtering a foreignkey.
I saw on http://www.stereoplex.com/blog/filtering-dropdown-lists-in-the-django-admin
parent_id = request.META['PATH_INFO'].strip('/').split('/')[-1]
Clearly it's not ideal.
Thanks!
Change History (14)
comment:1 by , 11 years ago
Description: | modified (diff) |
---|
comment:2 by , 11 years ago
Triage Stage: | Unreviewed → Accepted |
---|---|
Type: | Uncategorized → Cleanup/optimization |
The request is a documentation additional as outlined in the blog post.
It would be nice if there were a cleaner way to achieve the filtering, but until then, I guess we can document this solution.
comment:5 by , 6 years ago
For reference, the blog post referred to in the original issue can be found on the web archive, and the relevant code reads like this:
class MountaineeringInfoInline(admin.TabularInline): model = MountaineeringInfo formset = MountaineeringInfoInlineFormset def formfield_for_dbfield(self, field, **kwargs): if field.name == 'area': # Note - get_object hasn't been defined yet parent_trip = self.get_object(kwargs['request'], Trip) contained_areas = Area.objects.filter(area__contains=parent_trip.area.area) return forms.ModelChoiceField(queryset=contained_areas) return super(MountaineeringInfoInline, self).formfield_for_dbfield(field, **kwargs) def get_object(self, request, model): object_id = request.META['PATH_INFO'].strip('/').split('/')[-1] try: object_id = int(object_id) except ValueError: return None return model.objects.get(pk=object_id)
At least mentioning formfield_for_dbfield
in the docs at all, anywhere, sounds like a good idea to me, regardless of the specifics on how to get the current pk or instance.
comment:6 by , 5 years ago
Owner: | changed from | to
---|---|
Status: | new → assigned |
comment:8 by , 5 years ago
Patch needs improvement: | set |
---|
comment:10 by , 4 years ago
Patch needs improvement: | set |
---|
comment:11 by , 4 years ago
Patch needs improvement: | unset |
---|---|
Triage Stage: | Accepted → Ready for checkin |
Could you explain a bit more what you're trying to achieve?
To help you, we need something like: "here's my models definition, here's my admin definiton, at this URL ... I would like to..."