0

これはDjangoのクリスピーなフォームを使用しているときに発生している問題です。続きクエリセットから取得する外部キーで致命的なフォームエラーが発生しました

は今、これは私がサクサク-フォームを使用する前に使用してきた私のフォームであるモデルフィールド(のみ必要なコードを示す)」

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

私はクリスピーフォームを使用しない場合、これは正常に動作しますが、クリスピーフォームを使用して私が手にエラーがあることが外部キーです。特定のテナントに対して照会されているユニットと製造者に関連するフィールドはshowiではありません任意のオプションをクリスピーの形で使用します。私が実際にそれを鮮明な形で示すことができる方法はありますか、または私はこのクリスピーな形を完全に放棄しなければなりませんか?

ちょっとお手伝いをしたいのですが、動的選択を許可していれば、私はdjangoの "ForeignKey.limit_choices_to"でできることを自分のフォームでやっています。どんな助けでも大歓迎です。

答えて

0

次のようにして解決しました。

通常は、我々は次のコードでフォームを呼び出す:

from .forms import Formname 
form=Formname() 

を今、私はこれを行う場合は、何らかの形で、crispyformでのinitコンストラクタは現在のリクエストデータを得ることはありません。

の場合は、しかし、私は次のコードを使用し、crispyformは、ユーザデータを取得します。

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

この詳細な回答は今後の参考のためです。これが助けてくれることを願って。

関連する問題