Django - 在模板中访问 ForeignKey,但带有过滤器

Django - Access to ForeignKey in template, but with a filter

我需要访问对象列表的外键,但我不能让它工作。

这是我的模型

class Subcategory(models.Model):
# Relations

# Attributes - Mandatory
name = models.CharField(
        max_length=50,
        verbose_name=_('name'),
    )

class Product(models.Model):
    # Attributes - Mandatory
    name = models.CharField(
            max_length=63,
            unique=True,
            verbose_name=_('name'),
        )
    slug = models.SlugField(
            max_length=63,
            unique=True,
            editable=False,
            verbose_name=_('slug'),
        )
    title = models.CharField(
            max_length=63,
            editable=False,
            help_text=_('name to show the product in the templates'),
            verbose_name=_('title')
        )
    subcategory = models.ForeignKey(
            Subcategory,
            verbose_name=_('subcategory'),
        )
    # Precio de venta al público
    sell_price = models.DecimalField(
            max_digits=10,
            decimal_places=2,
            verbose_name=_('sell price'),
        )

    minimal_quantity = models.SmallIntegerField(
            default=1,
            verbose_name=_('minimal quantity'),
        )
    available = models.BooleanField(
            default=True,
        )
    created = models.DateTimeField(
            editable=False,
            verbose_name=_('created'),
        )
    modified = models.DateTimeField(
            editable=False,
            verbose_name=_('modified'),
        )

而且我必须访问产品的库存

class ProductStock(models.Model):
    # Relations
    product = models.ForeignKey(
        Product,
        verbose_name=_('product'),
    )
    warehouse = models.ForeignKey(
        Warehouse,
        default = 1,
        verbose_name=_('warehouse'),
    )
    # Attributes - Mandatory
    quantity = models.IntegerField(
        verbose_name=_('quantity'),
    )

这是 Warehouse 模型,它在其他应用程序中

class Warehouse(models.Model):
    # Relations
    store = models.ForeignKey(
            Store,
            blank=True,
            null=True,
            related_name='warehouse',
            verbose_name=_('store'),
        )

    # Attributes - Mandatory
    name = models.CharField(
            max_length=50,
            verbose_name=_('name'),
        )

    # Attributes - Optional
    address = models.CharField(
            max_length=100,
            verbose_name=_('address'),
        )
    phone = models.CharField(
            max_length=50,
            verbose_name=_('phone'),
        )

    # Attributes - Optional
    phone2 = models.CharField(
            max_length=50,
            blank=True,
            null=True,
            verbose_name=_('phone 2'),
        )
    mail = models.EmailField(
            verbose_name=_('mail'),
        )

这是我的函数视图

def product_stock_list(request, subcategory_id=None):
subcategory = None
subcategories = Subcategory.objects.all().order_by('family', 'name')
products = Product.objects.filter(available=True).exclude(subcategory=1)
if subcategory_id:
    subcategory = get_object_or_404(Subcategory, id=subcategory_id)
    products = products.filter(subcategory=subcategory)
if request.GET:
    try:
        ean13 = request.GET.get('ean13')
        ean13 = ean13.upper()
        p = products.get(ean13=ean13)
        return redirect(reverse('products:detail', kwargs=({'id': p.id, 'slug': p.slug})))
    except:

        products = None

return render(
        request,
        'products/stock_list.html',
        {
        'subcategory': subcategory,
        'subcategories': subcategories,
        'products': products,
        }
    )

嗯,我要获取的列表产品的数量是 ID=1 的仓库中的产品数量。

我正是需要这个: 产品 1 - 数量 产品 2 - 数量 产品 3 - 数量 ... ... 产品 N - 数量

感谢您的帮助!

可能有更好的方法,但我的做法是先获取仓库对象

warehouse_1=Warehouse.objects.get(id=1)

现在从 ProductStock

得到 quantity
products=ProductStock.objects.filter(warehouse=warehouse_1)

然后你可以遍历这个结果查询集来得到你想要的

for product in products:
    if product.subcategory.id != '10':
        print str(product.product.name) + " " + str(product.quantity)

这样行吗?