【问题标题】:Django query sets on many-2-many fieldDjango查询集在many-2-many字段上
【发布时间】:2011-09-23 08:46:20
【问题描述】:

我正在做以下工作:

# 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 吗?

【问题讨论】:

    标签: python django django-views


    【解决方案1】:

    这是错误的:

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

    您保存了一个包含多个查询的 M2M。说,比如:

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

    【讨论】:

      【解决方案2】:

      这绝对炸了我的面条(因为所有这些都非常违反直觉)但我设法想出了以下内容。我希望它可以帮助某人:

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

      【讨论】:

        猜你喜欢
        • 2021-09-20
        • 2017-08-20
        • 2022-01-11
        • 1970-01-01
        • 1970-01-01
        • 2021-08-07
        • 1970-01-01
        • 2017-11-13
        • 1970-01-01
        相关资源
        最近更新 更多