Поля поиска в django python - PullRequest
       36

Поля поиска в django python

7 голосов
/ 21 января 2010

Мне было интересно, как я могу использовать внешний ключ, чтобы выполнить поиск, например

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)

, чем в моем файле admin.py у меня

from CMS.Inventory.models import Product

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

но я хочу, чтобы «LotComments» мог использовать те же поля поиска, что и «Product», что и для кода ect.

Надеюсь, я все хорошо объяснил

Ответы [ 3 ]

16 голосов
/ 21 января 2010

Вы можете указать связанный поиск полей в admin search_fields так же, как вы делаете это в наборах запросов Django. Проверьте документацию . Для объекта LotComments search_fields будет выглядеть примерно так:

search_fields = ['product_lot__product__name', 
                 'product_lot__product__description', 
                 'product_lot__product__code',
                 'product_lot__lot_no']
2 голосов
/ 15 августа 2015

Добавление к предыдущим ответам. Я хотел бы предложить Расширенные фильтры администратора Django

Используйте этот плагин, чтобы добавить расширенный поиск и сохранить поддержку расширенного поиска. Также в вашем случае поля внешнего ключа могут быть сопоставлены с именем.

class padmin(AdminAdvancedFiltersMixin, admin.ModelAdmin):
    advanced_filter_fields = ('name', ('product_lot__product__name', 'Product name'))
1 голос
/ 31 января 2014

Для ссылки на внешний ключ используйте __ (два подчеркивания):

from CMS.Inventory.models import Product

class ProductAdmin(admin.ModelAdmin):
    search_fields=['name__name', 'description', 'code', 'lot_no' ]
    admin.site.register(Product, padmin)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...