2017-08-20 6 views
1

ための__init__メソッドでDjangoのフォームの値にアクセスします:は、どのように私は、外部キーを含むモデルを持っているクエリ

class Part(models.Model): 
    partType = models.ForeignKey(PartType, on_delete=models.CASCADE) 
    brand = models.ForeignKey(Brand, on_delete=models.CASCADE) 
    part_name = models.CharField(max_length=60) 

class QuotePart(models.Model): 
    quote = models.ForeignKey(Quote, on_delete=models.CASCADE) 
    line = models.PositiveSmallIntegerField(default=1) 
    partType = models.ForeignKey(PartType, on_delete=models.CASCADE) 
    # part can be None if the part has not been selected 
    part = models.ForeignKey(Part, on_delete=models.CASCADE,blank=True,null=True) 

私は部品が引用に追加することができるようにするためのフォームを持っているとします右PartTypeにあるが、私のコードが動作していないだけで部品にフォーム上の選択肢を制限したい:

class QuoteBikePartForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(QuoteBikePartForm, self).__init__(*args, **kwargs) 
     self.fields['partType'].widget.attrs['disabled'] = True 
     self.fields['frame_part'].widget.attrs['disabled'] = True 
     partType = kwargs.pop('partType') 
     self.fields['part'].queryset = Part.objects.filter(partType=partType.pk) 

    class Meta: 
     model = QuotePart 
     fields = ['quote','line','partType','frame_part', 'part', 'quantity','cost_price', 'sell_price'] 

QuoteBikePartFormSet = inlineformset_factory(Quote, QuotePart, form=QuoteBikePartForm) 

私は別のものと、これまで運の数を試してみました。

+0

は「動作していません」と定義します。それは何かエラーを投げているのですか?フィールドが正しく表示されていませんか? –

+0

私は親クラス '__init__'を呼び出すときに' partType'キーワードを期待していないと思います。もしそうなら、この行 'partType = kwargs.pop( 'partType')'を '__init__'メソッドの先頭に移動させるべきです – mateuszb

+0

私は先にポップを移動しましたが、エラーは発生しませんでしたが、パーツのリストはその行のpartType値によって制限されるリスト(これは私が必要とするものです。 –

答えて

0

「self.instance.key_name」を使用して値にアクセスできます。

関連する問題