In Django 2, the autocomplete_fields
feature allows you to create autocomplete fields using the ForeignKey
or OneToOneField
relationship in your admin forms. If you want to filter the choices shown in the autocomplete dropdown, you can use the limit_choices_to
attribute in your model's field definition.
Here's how you can use autocomplete_fields
and filter choices in Django 2:
Define the Model:
First, define your model with a ForeignKey
or OneToOneField
relationship, and use the limit_choices_to
attribute to specify the filtering criteria.
from django.db import models class Author(models.Model): name = models.CharField(max_length=100) class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey(Author, on_delete=models.CASCADE)
Configure autocomplete_fields
in Admin:
In your admin class, use the autocomplete_fields
attribute to specify which fields should have autocomplete functionality.
from django.contrib import admin from .models import Book class BookAdmin(admin.ModelAdmin): autocomplete_fields = ['author'] # Enable autocomplete for the 'author' field admin.site.register(Book, BookAdmin)
Filter Choices Using limit_choices_to
:
To filter the choices displayed in the autocomplete dropdown, use the limit_choices_to
attribute in your model's field definition. This attribute takes a dictionary of lookup conditions.
class Book(models.Model): title = models.CharField(max_length=100) author = models.ForeignKey( Author, on_delete=models.CASCADE, limit_choices_to={'name__startswith': 'J'} # Example filtering criteria )
In this example, the autocomplete dropdown for the author
field will only display authors whose names start with the letter 'J'.
Remember to replace the filtering criteria ({'name__startswith': 'J'}
in the example) with the conditions that match your use case.
By combining the autocomplete_fields
feature with the limit_choices_to
attribute, you can create autocomplete fields with filtered choices in Django 2's admin interface.
"Django2 autocomplete_fields filter choices" Description: This query aims to filter choices displayed in Django2's autocomplete_fields based on certain criteria.
# models.py from django.db import models class YourModel(models.Model): name = models.CharField(max_length=100) related_model = models.ForeignKey('RelatedModel', on_delete=models.CASCADE) class RelatedModel(models.Model): related_name = models.CharField(max_length=100) # admin.py from django.contrib import admin from .models import YourModel class YourModelAdmin(admin.ModelAdmin): autocomplete_fields = ['related_model'] admin.site.register(YourModel, YourModelAdmin)
"Django2 autocomplete_fields custom queryset" Description: This query is about customizing the queryset for autocomplete_fields in Django2 admin to filter choices dynamically.
# admin.py from django.contrib import admin from .models import YourModel, RelatedModel class YourModelAdmin(admin.ModelAdmin): def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'related_model': kwargs['queryset'] = RelatedModel.objects.filter(custom_criteria=True) return super().formfield_for_foreignkey(db_field, request, **kwargs) admin.site.register(YourModel, YourModelAdmin)
"Django2 autocomplete_fields limit choices" Description: This query seeks a method to limit the choices displayed in autocomplete_fields in Django2 admin.
# admin.py from django.contrib import admin from .models import YourModel class YourModelAdmin(admin.ModelAdmin): autocomplete_fields = ['related_model'] def get_search_results(self, request, queryset, search_term): queryset, use_distinct = super().get_search_results(request, queryset, search_term) queryset = queryset.filter(custom_criteria=True) return queryset, use_distinct admin.site.register(YourModel, YourModelAdmin)
"Django2 autocomplete_fields filter by user" Description: This query involves filtering choices in autocomplete_fields based on the logged-in user in Django2 admin.
# admin.py from django.contrib import admin from .models import YourModel class YourModelAdmin(admin.ModelAdmin): autocomplete_fields = ['related_model'] def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'related_model': kwargs['queryset'] = db_field.related_model.objects.filter(user=request.user) return super().formfield_for_foreignkey(db_field, request, **kwargs) admin.site.register(YourModel, YourModelAdmin)
"Django2 autocomplete_fields dynamic choices" Description: This query seeks a way to dynamically change the choices displayed in autocomplete_fields based on certain conditions.
# admin.py from django.contrib import admin from .models import YourModel, RelatedModel class YourModelAdmin(admin.ModelAdmin): def get_search_results(self, request, queryset, search_term): queryset, use_distinct = super().get_search_results(request, queryset, search_term) if 'related_model' in request.GET: related_model_id = request.GET.get('related_model') queryset = queryset.filter(related_model_id=related_model_id) return queryset, use_distinct admin.site.register(YourModel, YourModelAdmin)
"Django2 autocomplete_fields exclude choices" Description: This query involves excluding certain choices from autocomplete_fields in Django2 admin.
# admin.py from django.contrib import admin from .models import YourModel, RelatedModel class YourModelAdmin(admin.ModelAdmin): def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'related_model': kwargs['queryset'] = RelatedModel.objects.exclude(some_condition=True) return super().formfield_for_foreignkey(db_field, request, **kwargs) admin.site.register(YourModel, YourModelAdmin)
"Django2 autocomplete_fields filter by related object" Description: This query aims to filter choices in autocomplete_fields based on related objects in Django2 admin.
# admin.py from django.contrib import admin from .models import YourModel class YourModelAdmin(admin.ModelAdmin): autocomplete_fields = ['related_model'] def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'related_model': kwargs['queryset'] = db_field.related_model.objects.filter(some_condition=True) return super().formfield_for_foreignkey(db_field, request, **kwargs) admin.site.register(YourModel, YourModelAdmin)
"Django2 autocomplete_fields dynamic queryset" Description: This query involves dynamically changing the queryset for autocomplete_fields based on user actions or other conditions.
# admin.py from django.contrib import admin from .models import YourModel, RelatedModel class YourModelAdmin(admin.ModelAdmin): def get_search_results(self, request, queryset, search_term): queryset, use_distinct = super().get_search_results(request, queryset, search_term) # Customize queryset dynamically here return queryset, use_distinct admin.site.register(YourModel, YourModelAdmin)
"Django2 autocomplete_fields filter by date" Description: This query seeks a method to filter choices in autocomplete_fields based on dates or date-related criteria.
# admin.py from django.contrib import admin from .models import YourModel, RelatedModel class YourModelAdmin(admin.ModelAdmin): def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'related_model': kwargs['queryset'] = RelatedModel.objects.filter(date_field__gte=some_date) return super().formfield_for_foreignkey(db_field, request, **kwargs) admin.site.register(YourModel, YourModelAdmin)
"Django2 autocomplete_fields filter by related object field" Description: This query involves filtering choices in autocomplete_fields based on fields of related objects in Django2 admin.
# admin.py from django.contrib import admin from .models import YourModel, RelatedModel class YourModelAdmin(admin.ModelAdmin): autocomplete_fields = ['related_model'] def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'related_model': kwargs['queryset'] = RelatedModel.objects.filter(related_field=some_value) return super().formfield_for_foreignkey(db_field, request, **kwargs) admin.site.register(YourModel, YourModelAdmin)
mapstruct subdirectory new-window azure-api-apps url.action html-datalist page-break ear apache-commons-config azure-devops