2017-06-19 116 views
0

我正在嘗試使用4個模型(類別,產品組,產品,庫存)製作庫存系統 - 如下所示。django - 如何將ForeignKey的ForeignKey(3級)字段添加到表單

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和缺貨獨立的視圖設置Af - Ag型

由於該表的產品基本上是ProductGroup,製造商的置換和ProductType它將包含一個巨大的記錄集。

我需要將Cateogry和ProductGroup字段添加爲鏈接字段,以便窗體中的Product.name只包含一個過濾的集合。

請提供一些關於如何進行的見解。

謝謝。

回答

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