Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Search_fields in django python

I was wondering how I am able to use a foreign key to preform a search for example

class Product(models.Model):
    name = models.CharField(max_length = 127)
    description = models.TextField()
    code = models.CharField(max_length = 127)

    def __unicode__(self):
        return self.name + " - " + self.code

class ProductLot(models.Model):
    product = models.ForeignKey(Product)
    code = models.CharField(max_length = 30)
    lot_no = models.CharField(max_length = 30)
    location = models.CharField(max_length = 127)
    incoming = models.IntegerField()
    commited = models.IntegerField()
    available = models.IntegerField()
    reorder = models.IntegerField()
    created_date = models.DateField(auto_now_add=True)

    def __unicode__(self):
        return self.code + " - " + self.product.name + " - " + self.lot_no

class LotComment(models.Model):
     product_lot = models.ForeignKey(ProductLot)
     comment_user = models.ForeignKey(User, null=True)
     comment_text = models.TextField()
     created_date = models.DateField(auto_now_add=True)

    def __unicode__(self):
        return self.product_lot.product.code + " - " + 
           self.product_lot.product.name + " - " + 
           self.product_lot.lot_no + " - " + str(self.created_date)

than in my admin.py file I have

from CMS.Inventory.models import Product

class padmin(admin.ModelAdmin):
    search_fields=['name', 'description', 'code', 'lot_no' ]
admin.site.register(Product, padmin)

but I want for 'LotComments' to be able to use the same search fields that 'Product' can as for code ect.

Hope I explained this well

like image 753
Jon Avatar asked Jan 21 '10 00:01

Jon


People also ask

What is _( in Django?

_ in Django is a convention that is used for localizing texts. It is an alias for ugettext_lazy.

How do I access my Django admin page?

To login to the site, open the /admin URL (e.g. http://127.0.0.1:8000/admin ) and enter your new superuser userid and password credentials (you'll be redirected to the login page, and then back to the /admin URL after you've entered your details).

What is admin panel in Django?

Django provides a built-in admin module which can be used to perform CRUD operations on the models. It reads metadata from the model to provide a quick interface where the user can manage the content of the application. This is a built-in module and designed to perform admin related tasks to the user.


3 Answers

You can specify related field searches in the admin search_fields the same way you do on Django querysets. Check on the documentation. For the LotComments object, the search_fields would look something like:

search_fields = ['product_lot__product__name', 
                 'product_lot__product__description', 
                 'product_lot__product__code',
                 'product_lot__lot_no']
like image 198
Jarret Hardie Avatar answered Nov 11 '22 08:11

Jarret Hardie


Adding to the previous answers. I would like to suggest Django Admin advance filters

User this plugin to add advance search and save advance search support. Also in your case foreign key fields can be mapped to a name.

class padmin(AdminAdvancedFiltersMixin, admin.ModelAdmin):
    advanced_filter_fields = ('name', ('product_lot__product__name', 'Product name'))
like image 33
naren Avatar answered Nov 11 '22 08:11

naren


For referencing the foreign key use __ (two underscores):

from CMS.Inventory.models import Product

class ProductAdmin(admin.ModelAdmin):
    search_fields=['name__name', 'description', 'code', 'lot_no' ]
    admin.site.register(Product, padmin)
like image 42
Avinash Garg Avatar answered Nov 11 '22 08:11

Avinash Garg