0

MultipleChoiceField があり、管理者で以前に選択された値を表示するには、ModelForm からメソッドinitをオーバーライドする必要があります。私はその形式で次のクラスを持っています:

class Profile(models.Model):
    name = models.CharField(max_length=64)
    contract = models.CharField(max_length=100)

class ProfileForm(forms.ModelForm):
    CONTRACT_CHOICES = (
        ('scholar', _(u'Scholar')),
        ('freelance', _(u'Freelance')),
        ('contract', _(u'Contract')),
        ('volunteer', _(u'Volunteer'))
    )
    contract = forms.MultipleChoiceField(choices=CONTRACT_CHOICES)

    def __init__(self, *args, **kwargs):
        initial = kwargs.get('initial',{})
        initial['contract'] = ['scholar', 'contract', 'freelance'] #Here I would have to be able to get the attribute contract from the Profile class, not this list
        kwargs['initial'] = initial
        super(ProfileForm, self).__init__(*args, **kwargs)

作品ではinitial['contract']=['scholar','contract','freelance'](この値は選択されたものとして表示されます)、プロファイルの属性コントラクトでこれを達成する必要があります。属性instanceを使用して ModelForm からモデルにアクセスできることは知っていますが、問題が 1 つあります。init のネイティブ メソッドが呼び出されると、インスタンスにしかアクセスできなくなります。この場合、後で呼び出す必要があります。そうしないとうまくいかないからです。私はすでに次の方法でそれをやろうとしました:

def __init__(self, *args, **kwargs):
    super(ProfileForm, self).__init__(*args, **kwargs)
    self.fields['contract'].initial = self.instance.contract

しかし、それは機能しません (エラーは表示されませんが、選択した属性が選択済みとして表示されません)。さらに、以下も機能しません。

def __init__(self, *args, **kwargs):
    super(ProfileForm, self).__init__(*args, **kwargs)
    self.fields['contract'].initial = ['scholar', 'contract', 'freelance']

最初の方法でしか機能していませんが、属性コントラクトへのアクセス方法がわからないという問題があります。何か案は?前もって感謝します

4

0 に答える 0