1

私はmongodbのdjango-nonrelにmanytomanyフィールドリレーションを実装しようとしています。それは次のように提案されました:

Django-ListFieldのnonrelフォームフィールド

受け入れられた答えに従う

models.py

class MyClass(models.Model):
    field = ListField(models.ForeignKey(AnotherClass))

以下がどこに行くのかわかりません、fields.py、widgets、py、models.pyでテストされています

class ModelListField(ListField):
    def formfield(self, **kwargs):
    return FormListField(**kwargs)

class ListFieldWidget(SelectMultiple):
    pass

class FormListField(MultipleChoiceField):
    """
    This is a custom form field that can display a ModelListField as a Multiple Select GUI element.
    """
    widget = ListFieldWidget

    def clean(self, value):
    #TODO: clean your data in whatever way is correct in your case and return cleaned data instead of just the value
    return value

admin.py

class MyClassAdmin(admin.ModelAdmin):
    form = MyClassForm

    def __init__(self, model, admin_site):
    super(MyClassAdmin,self).__init__(model, admin_site)

admin.site.register(MyClass, MyClassAdmin)

次のエラーが引き続き表示されます。

中間のカスタムクラスコードがmodels.pyで使用されている場合

name 'SelectMultiple' is not defined

カスタムクラスコードがmodels.pyから削除された場合:

No form field implemented for <class 'djangotoolbox.fields.ListField'>
4

1 に答える 1

0

その音で SelectMultiple をインポートするだけです。これら 3 つのファイルのいずれかにコードを配置できます。fields.py は理にかなっています。

持っているのはかなり普通なので:

from django import forms

すでにファイルの先頭にあるので、おそらく以下のコードを編集して次のようにします。

# you'll have to work out how to import the Mongo ListField for yourself :)
class ModelListField(ListField):
    def formfield(self, **kwargs):
    return FormListField(**kwargs)

class ListFieldWidget(forms.SelectMultiple):
    pass

class FormListField(forms.MultipleChoiceField):
    """
    This is a custom form field that can display a ModelListField as a Multiple Select GUI element.
    """
    widget = ListFieldWidget

    def clean(self, value):
    #TODO: clean your data in whatever way is correct in your case and return cleaned data instead of just the value
    return value

おそらく、Python の仕組みやモジュールのインポート方法などについてもう少し学びたいと思うでしょう。

于 2011-10-25T15:05:41.297 に答える