2011-06-27 81 views
0

我以下工作:Django的查詢集許多-2-許多領域

# models.py 

class FinancialProduct(models.Model): 
    active = models.BooleanField(default=True) 
    businesses = models.ManyToManyField(Business) 
    name = models.CharField(max_length=40, unique=True) 

class Item(models.Model): 
    main_client = models.ForeignKey(Client) 
    financial_product = models.ForeignKey(FinancialProduct) 
    advisor = models.ForeignKey(User, blank=True, null=True) 
    business = models.ForeignKey(Business) 

class Business(models.Model): 
    active = models.BooleanField(default=True) 
    name = models.CharField(max_length=40, unique=True) 

# forms.py 

class ItemForm(ModelForm): 

    def __init__(self,fpID,*args,**kwargs): 
     super(ItemForm, self).__init__(*args, **kwargs) 
     self.fields['advisor'].queryset = User.objects.filter(groups__name='advisor') 
     self.fields['business'].queryset = Business.objects.filter(financialproduct__businesses=fpID) 

    class Meta: 
     model = Item 
     exclude = ('main_client', 'financial_product') 

    def CustomSave(self,f,c,u): 
     idb = self.save(commit=False) 
     idb.financial_product = f 
     idb.main_client = c 
     return idb.save() 

我創建了以下數據:

Business(1,'Company1') 
Business(1,'Company2') 
FinancialProduct(1,'Company1', 'Small Product') 
FinancialProduct(1,'Company1,Company2', 'Large Product') 

在前端,我得到以下幾點:

Select 'Small Product' > Get ('Company 1', 'Company 1', 'Company 2') 
Select 'Large Product' > Get ('Company 1', 'Company 2') 

不幸的是,我似乎以錯誤的方式獲取數據。我在做什麼錯在__init__的第三行?是因爲它是M2M嗎?

回答

0

這絕對油炸給我的麪條(因爲所有這一切都是非常直覺),但我設法想出以下。我希望它可以幫助別人:

self.fields['business'].queryset = Business.objects.filter(financialproduct__id=fpID.id) 
1

這是錯誤的:

FinancialProduct(1,'Company1,Company2', 'Large Product') 

您保存多個查詢的M2M。你說,這樣的:

FinancialProduct(1,'Company1', 'Large Product').save() 
FinancialProduct(1,'Company2', 'Large Product').save() 
+0

它的僞代碼 – Sevenearths