在Django中根据外键过滤数据

时间:2018-09-19 13:43:05

标签: django-models

我是Django的新手。根据我的模型,我无法弄清楚。我有一个产品表和一个产品图像表。在产品图像表中,我具有产品表的外键。现在,我想显示基于产品表外键的所有图像。我怎样才能做到这一点。我有很多产品可以通过一个特定的ID或名称来完成,但我不希望这样做,因为我有数百种产品需要基于外键动态获取图像数据。

通过这个示例,我可以制作单个产品图片。

p = Product.objects.get(pk=1)
pimage = Product_Image.objects.filter(product_image=p)

但是该数据仅基于手动pk = 1希望您能理解。我想过滤很多产品数据,我无法根据ID提及每个查询。所以请帮帮我。在php中非常简单,我可以将ID存储在变量中,然后使用Where子句匹配记录。

我也如何在模板上显示。

感谢您的帮助。

我的模型如下。

    class Product(models.Model):
    product_category        = models.ForeignKey(Category, on_delete=models.CASCADE)
    product_name            = models.CharField(max_length=250, unique=True)
    product_slug            = models.SlugField(max_length=250, unique=True)
    product_description     = models.TextField(blank=True)    
    product_price           = models.DecimalField(max_digits=10, decimal_places=2)
    product_stock           = models.IntegerField()
    product_available       = models.BooleanField(default=True)
    product_created         = models.DateTimeField(auto_now_add=True)
    product_updated         = models.DateTimeField(auto_now=True)

    class Meta:
        ordering            = ('-product_created',)
        verbose_name        = 'product'
        verbose_name_plural = 'products'

    def __str__(self):
        return '{}'.format(self.product_name)


# Image Model with thumbnail generation

class Product_Image(models.Model):
    product                 = models.ForeignKey(Product, related_name='images', on_delete=models.CASCADE)    
    product_image_created   = models.DateTimeField(auto_now_add=True)
    product_image_updated   = models.DateTimeField(auto_now=True)


    product_image           = ProcessedImageField(upload_to='product',
                                                  processors=[ResizeToFill(400,400)],
                                                  format='JPEG',
                                                  options={'quality': 80})


    class Meta:
        ordering                = ('-product_image_created',)
        verbose_name            = 'product-image'
        verbose_name_plural     = 'products-images'

    def __str__(self):
        return '{}'.format(self.product_image)

0 个答案:

没有答案