外键的脆皮形式错误,这是我从queryset得到的



这是我在使用Django crispy form时遇到的一个问题。

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

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')

如果我不使用酥脆的形式,这个工作很好。然而,在使用脆形式时,我得到的错误是,与Unit和Manufacturer(正在查询特定租户)相关的外键字段在脆形式中没有显示任何选项。有什么方法可以用脆皮的形式表现出来吗,或者我必须完全放弃这种脆皮的形式?

只是为了帮助你,我在我的表单中做了一个人可以用django的"ForeignKey"做的事情。Limit_choices_to ",如果它允许动态选择的话。

用下面的东西解决了这个问题。

通常,我们用以下代码调用form:
from .forms import Formname
form=Formname()

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

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

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

此详细答案供将来参考。希望这能帮到你。

相关内容

  • 没有找到相关文章

最新更新