2017-06-19 3 views
0

にForeignKeyの者のForeignKey(3レベル)フィールドを追加する方法。ジャンゴ - 下記のよう - カテゴリ、ProductGroup、製品、証券 - 私は4つのモデルと在庫システムを作るためにしようとしているフォーム

class Category(MPTTModel): 
    name=models.CharField(max_length=75,null=False,blank=False, unique=True) 
    parent=TreeForeignKey('self', null=True, blank=True, related_name='children') 

class ProductGroup(models.Model): 
    name = models.CharField(max_length=30,null=False, blank=False) 
    category=TreeForeignKey('category.Category', null=False,blank=False) 

class Product(models.Model): 
    product_group=models.ForeignKey('productgroup.ProductGroup', null=False,blank=False) 
    manufacturer=models.ForeignKey(Manufacturer, null=False,blank=False) 
    product_type=models.CharField(max_length=2, choices=PRODUCT_TYPE,) 
    opening_stock=models.PositiveIntegerField(default=0) 

TRANSACTION_TYPE=(('I','Stock In'),('O','Stock Out')) 
class Stock(models.Model): 
    product=models.ForeignKey('product.Product', blank=False,null=False) 
    quantity=models.PositiveIntegerField(blank=False, null=False) 
    ttype=models.CharField(max_length=1,verbose_name="Transaction type",choices=TRANSACTION_TYPE, blank=False) 

と私は以下のようにStock-In/Outを記録するためのモデル形式を持っています。

class StockInOutForm(forms.ModelForm): 
    class Meta: 
     model = Stock  
     fields=['product','quantity','date'] 

テーブル製品ので

(StockInと欠品のための2つの別々のビューがTTYPEを設定すること)は、基本的ProductGroup、メーカーの順列であり、でProductTypeそれはレコードの巨大なセットを含むであろう。

私は形でProduct.nameのための唯一のフィルタセットが含まれますように、チェーンフィールドとしてCateogryとProductGroupフィールドを追加する必要があります。

親切に続行する方法にいくつかの洞察を与えます。

ありがとうございました。

答えて

0

ありがとう@Exprator フィールドを希望の順序で取得するには、次のコードを使用しました。

from collections import OrderedDict 
class StockInOutForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     user = kwargs.pop('user','') 
     super(StockInOutForm, self).__init__(*args, **kwargs) 
     self.fields['category']=TreeNodeChoiceField(queryset=Category.objects.all()) 
     self.fields['product_group']=forms.ModelChoiceField(queryset=ProductGroup.objects.filter(id=0)) 
     self.fields['product']=forms.ModelChoiceField(queryset=ProductGroup.objects.filter(id=0)) 
     original_fields = self.fields 

     new_order = OrderedDict() 
     for key in ['category','product_group', 'product','quantity','date']: 
      new_order[key] = original_fields[key] 
     self.fields = new_order 
関連する問題