这是我在使用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" ,如果它允许动态选择。任何帮助将不胜感激。
答案 0 :(得分:0)
刚刚解决了以下问题。
通常,我们使用以下代码调用表单:
from .forms import Formname
form=Formname()
现在,如果我这样做,不知何故,crispyform中的 init 构造函数不会获取当前的请求数据。
但是,如果我使用以下代码,则crispyform将获取用户数据:
from .forms import Formname
form=Formname(request.user.whatever_you_need)
此详细答案供将来参考。希望这会有所帮助。