Django python 中的Search_fields

发布于 2024-08-18 13:32:43 字数 1531 浏览 1 评论 0原文

我想知道如何使用外键来执行搜索,例如

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”相同的搜索字段代码等

希望我解释得很好

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

○闲身 2024-08-25 13:32:43

您可以在管理 search_fields 中指定相关字段搜索,就像在 Django 查询集中一样。查看文档 。对于 LotComments 对象,search_fields 看起来像:

search_fields = ['product_lot__product__name', 
                 'product_lot__product__description', 
                 'product_lot__product__code',
                 'product_lot__lot_no']

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']
玩物 2024-08-25 13:32:43

添加到以前的答案。我想建议 Django Admin 高级过滤器

使用此插件添加高级搜索并保存高级搜索支持。
另外,在您的情况下,外键字段可以映射到名称。

class padmin(AdminAdvancedFiltersMixin, admin.ModelAdmin):
    advanced_filter_fields = ('name', ('product_lot__product__name', 'Product name'))

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'))
孤寂小茶 2024-08-25 13:32:43

要引用外键,请使用 __ (两个下划线):

from CMS.Inventory.models import Product

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

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)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文