2

I want to add a dropdown with autocomplete filter such as select2 into django admin form with class based model. i have tried several tricks avilable over the internet but not succeeded. here are some code snippet i have. i want to show all category for a post which is already available into model. in my model.py

class Post(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    title = models.CharField(max_length=200, unique=True)
    slug = models.SlugField(max_length=200, unique=True)
    featured_image = models.ImageField(null=True, blank=True, upload_to="blog/", verbose_name='Featured Image')
    author = models.ForeignKey(User, on_delete= models.CASCADE,related_name='blog_posts')
    updated_on = models.DateTimeField(auto_now= True)
    content = RichTextUploadingField()
    created_on = models.DateTimeField(auto_now_add=True)
    status = models.IntegerField(choices=STATUS, default=0)

    class Meta:
        ordering = ['-created_on', 'title']

    def __str__(self):
        return self.title

    def _generate_slug(self):
        value = self.title
        slug_candidate = slugify(value, allow_unicode=True)
        self.slug = slug_candidate

    def save(self, *args, **kwargs):
        if not self.pk:
            self._generate_slug()
        super().save(*args, **kwargs)

my admin.py

class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'status', 'category', 'author','created_on')
    list_filter = ("status",)
    search_fields = ['title', 'content']
    prepopulated_fields = {'slug': ('title',)}
    actions = [export_as_csv_action("CSV Export", fields=['title','slug','author','featured_image','status','created_on','updated_on'])]

how my form looks into django-admin enter image description here please suggest anything how to add i filter for category dropdown filter with autocomplete.

Manish Agarwal
  • 166
  • 2
  • 12

1 Answers1

3

In Django 2.0+ you can just add autocomplete_fields to the ModelAdmin:

class PostAdmin(admin.ModelAdmin):
    autocomplete_fields = ['category']

This will add asynchronous search of all categories the user has access to (versus a standard dropdown/select).