使用外键的Crispy表单错误,我从queryset

时间:2016-09-29 18:31:30

标签: django django-models django-forms django-queryset django-crispy-forms

这是我在使用Django crispy形式时遇到的问题。

以下是模型字段(仅显示必要的代码)"

class Product(models.Model):
    name=models.CharField(max_length =200)
    unit = models.ForeignKey(Unit,related_name='product_master_master_unit')
    manufacturer=models.ForeignKey(Manufacturer,related_name='product_master_master_manufacturer')
    tenant=models.ForeignKey(Tenant,related_name='product_master_user_tenant')
    objects = TenantManager()

现在,这是我在使用脆皮之前使用的形式。我只查询那些特定于当前租户的字段。这是根据以下内容完成的:

class ProductForm(forms.ModelForm):
    def __init__(self,*args,**kwargs):
        self.tenant=kwargs.pop('tenant',None)
        super (ProductForm,self ).__init__(*args,**kwargs) # populates the post
        self.fields['unit'].queryset = Unit.objects.for_tenant(self.tenant).all()
        self.fields['manufacturer'].queryset = Manufacturer.objects.for_tenant(self.tenant).all()

    class Meta:
        model=Product
        exclude =('slug', 'tenant')

如果我不使用香脆的形式,这样可以正常使用。但是,在使用crispy形式时,我得到的错误是与Unit和Manufacturer(正在为特定租户查询)相关的外键字段没有以清脆的形式显示任何选项。有什么方法可以让我以脆皮的形式表现出来,或者我是否必须完全抛弃这种脆弱的形式?

只是为了帮助你,我正在用我的形式做什么,可以用django" ForeignKey.limit_choices_to" ,如果它允许动态选择。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

刚刚解决了以下问题。

通常,我们使用以下代码调用表单:

from .forms import Formname
form=Formname()

现在,如果我这样做,不知何故,crispyform中的 init 构造函数不会获取当前的请求数据。

但是,如果我使用以下代码,则crispyform将获取用户数据:

from .forms import Formname
form=Formname(request.user.whatever_you_need)

此详细答案供将来参考。希望这会有所帮助。