2

他の 2 つのモデルにリンクする Access というモデルがあります。

class Access (models.Model):
    portfolio_id = models.ForeignKey(Portfolio)
    user_id = models.ForeignKey(User)
    title = models.CharField(max_length=30, null=True, blank=True)
    access_rights = models.PositiveIntegerField(choices=ACCESS_CHOICES)

このフォームを作成しました。

class UserAccessForm(forms.ModelForm):
    class Meta:
    model = Access

私はこれをビューに持っています。

AccessFormSet = inlineformset_factory(Portfolio,
                                      Access,
                                      form=UserAccessForm,
                                      extra=1,
                                      can_delete=False)
cAccessFormSet = AccessFormSet(instance=cPorfolio)

問題は Web ページにあります。user_id が選択フィールドとして表示され、すべてのユーザーのリストが表示されます (つまり、「jane15」、「tom54」)。誰かがユーザー名を入力しなければならないテキスト フィールドにしたい。以下のようにカスタマイズしようとすると、「ユーザー名」(つまり「1」、「2」) の代わりに「ユーザー ID」が表示されます。

class UserAccessForm(forms.ModelForm):
    user_id = forms.ChoiceField(required=True, widget=forms.TextInput)
    class Meta:
        model = Access

ユーザー名 (つまり "jane15") を選択フィールドではなくテキストフィールドとして表示して受け入れるフォームセットを取得するにはどうすればよいですか?

4

1 に答える 1

1

ユーザー名を入力したい場合、選択フィールドは適していません。

CharFieldであるを使用し<input type='text'>、メソッドをオーバーライドしclean_FOOて、ユーザー インスタンスへの入力を検証するか、エラー メッセージを生成します。

class UserAccessForm(forms.ModelForm):
    user_id = forms.CharField()

    class Meta:
        model = Access

    def clean_user_id(self):
        data = self.cleaned_data.get('user_id')
        try:
            user = User.objects.get(username=data)
        except User.DoesNotExist:
            raise forms.ValidationError("No user exists by that username")
        return user

それをフォームセットに渡せば完了です。

于 2011-03-06T01:21:12.983 に答える