Джанго-Нонрел с полем Монгодб - PullRequest
1 голос
/ 16 октября 2011

Я пытаюсь реализовать множество полевых отношений в django-nonrel на mongodb. Было предложено на:

Поле формы Django-nonrel для ListField

После принятого ответа

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'>

1 Ответ

0 голосов
/ 25 октября 2011

Вам просто нужно импортировать SelectMultiple по его звуку.Вы можете поместить код в любой из этих трех файлов, в файле 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, как импортировать модули и т. д.

...