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)
这样行吗?
我需要访问对象列表的外键,但我不能让它工作。
这是我的模型
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)
这样行吗?