1

私は以下のように2つのモデルを持っています:

class Types_of_Expenditures(models.Model):
    Expenditure_owner = models.CharField(default="None",max_length=50)
    Expenditure_Type = models.CharField(default="Miscellaneous",max_length=50)
    Expenditure_Type_Description = models.CharField(max_length=200)
    def __unicode__(self):
        return self.Expenditure_Type

class Expenditure(models.Model):
    exp_owner= models.CharField(default='None',max_length=50)
    exp_date = models.DateTimeField("Expenditure_Date")
    description = models.CharField(max_length=1000)
    amount = models.FloatField(default=0)
    currency = models.CharField(max_length=15,default="MYR",editable=True)
    exp_pocket = models.ForeignKey(Pockets, null=True, blank=True)
    exp_type = models.ForeignKey(Types_of_Expenditures)
    class Meta:
        unique_together = ('exp_date', 'description',)
    def __unicode__(self):
        return self.description

上記の 2 つのモデルでは、以下の 2 つのフォームを使用しています。

class Types_of_Expenditures_Form(forms.ModelForm):
    class Meta:
        model = Types_of_Expenditures

class ExpenditureDeleteForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(ExpenditureDeleteForm, self).__init__(*args, **kwargs)
        self.fields['exp_pocket'].widget = forms.TextInput(attrs={'readonly':'readonly'})
        self.fields['exp_type'].widget = forms.TextInput(attrs={'readonly':'readonly'})
        self.fields['amount'].widget = forms.TextInput(attrs={'readonly':'readonly'})
        for f in self.fields:
            self.fields[f].widget.attrs['readonly'] = "readonly"
    class Meta:
        model = Expenditure
        exclude = ['exp_owner','currency']
        fields = ['exp_date', 'description', 'exp_type', 'amount','exp_pocket']

私の見解では、次のように呼び出します。

ExpDeleteFormSet = modelformset_factory(Expenditure,extra=0,
            can_delete=True,fields = ['exp_date', 'description', 'exp_type', 'amount','exp_pocket'],form=ExpenditureDeleteForm)
formset = ExpDeleteFormSet(queryset=Expenditure.objects.filter(exp_owner=str(request.user)))
return render_to_response('expenditure.html', {'formset':formset}, context)

レンダリングされるフォームセットは以下の画像のようになります:

問題/質問: 画像でわかるように、タイプには 1 または 2 の番号が付けられています。この 1 には、Types_of_Expenditure の Miscellaneous として対応する値があり、2 にはその他の値があります。Types_of_Expenditure から対応する値としてタイプを表示することは可能ですか?

Baseformset を使用してクエリセットを使用しようとしたが、その方法を見つけることができないなど、さまざまなことを試しましたか?

ここに画像の説明を入力

試したこと

  1. 以下のように inlineformset_factory を使用しますが、そうすることでテンプレート内の何もレンダリングされません:

    ExpDeleteFormSet = inlineformset_factory(Types_of_Expenditures, 
                                         Expenditure, fk_name="exp_type",
                                         fields = ['exp_date', 'description', 'exp_type', 'amount','exp_pocket'],
                                         can_delete=True,form=ExpenditureDeleteForm)
    

うまく機能 する代替手段:私が現在使用している代替手段は、 Expenditure_Type 自体を主キーにすることですが、元の質問の答えを探します:

Expenditure_Type = models.CharField(primary_key=True,max_length=50)
4

0 に答える 0