2017-08-20 22 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'來訪問該值。