2016-08-31 8 views
0

私は三つのモデルがあります:Djangoの1.8深い逆の関係検索

thisdate=datetime.today() 
products=Product.objects.filter(product_state=1,productinventory__sale__sale_date__month=thisdate.month).values('pk','productname','productinventory__sale__sale_date') 
:私は何をしたいか

class Product(models.Model): 
    idproduct=models.AutoField(primary_key=True) 
    productname=models.CharField(max_length=100, blank=False, null=False) 
    product_state=models.BooleanField(default=True) 


class ProductInventory(models.Model): 
    idinventory=models.AutoField(primary_key=True) 
    product_idproduct=models.ForeignKey(Product) 
    storage_idstorage=models.ForeignKey(Storage) 

class Sale(models.Model): 
    idsale=models.AutoField(primary_key=True) 
    sale_date = models.DateTimeField(default=timezone.now) 
    inventory_idinventory=models.ForeignKey(ProductInventory) 

を今月中に販売されているすべての製品を得ることです、私はこれを試してみました

しかし、最初は、それは私が「ネストされたルックアップはサポートされていません」ので、私は月にフィルタをオフtaked、それの後に、それは私にFieldErrorを与えています:Cannot resolve keyword 'sale' into field

私はこれをどのように行うことができますか?

+0

あなたの 'Storage'モデルはどこですか?また、この特定の命名規則に従っている理由は何ですか? – electrometro

答えて

2

なぜ商品から質問していますか? Saleから質問してみませんか?

Sale.objects.filter(sale_date__month=thisdate).filter(inventory_idinventory__product_idproduct__productstate=True).values('inventory_idinventory __product_idproduct__pk', 'inventory_idinventory __product_idproduct__ productname') 

はまた、あなたの命名規則は、私はヘンリー・Hは、クリーンアップ・ソリューションを提供し、私もそれをお勧めしますと信じて、本当に悪いです。あなたがそれをきれいにしたら、カスタムマネージャーの方法でこれを本当にいいものにすることができます。

+0

私はそれを考えなかった、私はそれを販売から試してみるつもりだ。 – elG

1
class Product(models.Model): 
    name=models.CharField(max_length=100, blank=False, null=False) 
    state=models.BooleanField(default=True) 

class Product_Inventory(models.Model): 
    product=models.ForeignKey(Product) 
    storage=models.ForeignKey(Storage) 

class Sale(models.Model): 
    date = models.DateTimeField(default=timezone.now) 
    product_inventory=models.ForeignKey(Product_Inventory) 

thisdate=datetime.today() 
inventory=[] 
products=[] 

sales = Sale.objects.filter(date__month = thisdate.month) 
for item in sales: 
    inventory.append(Product_inventory.objects.filter(sale = item)) 
for product in inventory: 
    products.append(Product.objects.filter(product_inventory = product)) 

print products 

このような何かが働くだろう。私はあなたのモデルを読むのが難しいほど自由にしました。 IDはモデル(pk)に自動的に追加されるので、必ずしもここに追加する必要はありません。

+0

私はIDがMySqlデータベースに関連しているのでidを使用しました.DjangoではなくIDを使用する必要があります。ソリューションに感謝して、私はそれを試してみるつもりです。 – elG

+0

デフォルトでは、テーブルの名前は主キーの名前に自動的に "_id"が追加され、モデルから完全に省略することができます。 – electrometro