2017-03-21 52 views
0

我需要访问对象列表的外键,但我无法使其工作。Django - 在模板中访问ForeignKey,但使用过滤器

这是我的模型

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'), 
    ) 

这是仓库模型,它在其他应用程序

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的仓库上的产品数量。

我需要的正是这样: Produc1 - 数量 产品2 - 数量 产品3 - 数量 ... ... ProductN - 数量

感谢您的帮助!

+0

提供您的仓库模型! – shuboy2014

+0

已经添加到帖子中!谢谢 – marcosgue

回答

1

有可能是一个更好的办法,但我是第一个拿到仓库对象

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

现在的方式quantityProductStock

products=ProductStock.objects.filter(warehouse=warehouse_1) 

然后可以循环度过这次难关导致查询设置得到你想要的东西

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

是否th工作中?

+0

谢谢!我现在要尝试,让我知道如果我让它工作! – marcosgue

+0

好的。请告诉我。 Thansk。 –

+0

我似乎解释自己错了,当我尝试这个时,我意识到我需要的是产品清单的库存。我在原帖中添加了视图 – marcosgue