15

カスタム ユーザーで Django アプリを作成しています。私の問題の主要なコンポーネントを以下に概説しました。欠落しているコードは「...」で示されます。私のカスタム ユーザー モデルには、次のような外部キー関係があります。

class MyCustomUser(models.AbstractBaseUser, models.PermissionsMixin)
    ...
    location = models.ForeignKey(Location)

class Location(models.Model)
    name = models.CharField(max_length=50, blank=True, null=True)

次のように、このフィールドを含むカスタム ユーザー フォームを作成しました。

class MyCustomUserCreationForm(models.ModelForm)
    ...
    location = forms.ModelChoiceField(Location.objects.all())

これはすべて正しく機能しているように見えますが、場所の選択フィールドの右側にプラス ボタンはありません。Django チュートリアルで選択肢を作成するときに投票を追加できるのと同じ方法で、ユーザーを作成するときに場所を追加できるようにしたいと考えています。この質問によると、モデルを変更する権限がない場合、緑色のプラスが表示されない可能性がありますが、すべての権限を持つスーパーユーザーとしてログインしています。私が間違っていることは何か分かりますか?

4

4 に答える 4

9

上記の回答に基づいてメソッドを作成しました:

def add_related_field_wrapper(form, col_name):
    rel_model = form.Meta.model
    rel = rel_model._meta.get_field(col_name).rel
    form.fields[col_name].widget = 
    RelatedFieldWidgetWrapper(form.fields[col_name].widget, rel, 
    admin.site, can_add_related=True, can_change_related=True)

そして、私のフォームからこのメソッドを呼び出します:

class FeatureForm(forms.ModelForm):
    offer = forms.ModelChoiceField(queryset=Offer.objects.all(), required=False)
    package = forms.ModelChoiceField(queryset=Package.objects.all(), required=False)
    def __init__(self, *args, **kwargs):
        super(FeatureForm, self).__init__(*args, **kwargs)
        add_related_field_wrapper(self, 'offer')
        add_related_field_wrapper(self, 'package')

Django 1.8.2 では問題なく動作します。

于 2015-08-20T07:20:09.610 に答える
2

ForeignKey リレーションシップを持つカスタム フォームのフィールドの横に「+」アイコンを取得する方法を検索しているときに、Google がこのページを指摘したので、追加しようと思いました。

私にとってdjango-autocomplete-lightは、「別の追加」機能を使用して、非常にうまく機能しました。

于 2014-03-21T13:29:39.633 に答える