【问题标题】:Django-Nonrel with Mongodb listfield带有 Mongodb 列表字段的 Django-Nonrel
【发布时间】:2011-12-08 14:42:16
【问题描述】:

我正在尝试在 mongodb 上的 django-nonrel 中实现多字段关系。建议在:

Django-nonrel form field for 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'>

【问题讨论】:

    标签: mongodb django-admin django-nonrel listfield


    【解决方案1】:

    您只需要通过它的声音导入 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 工作原理、如何导入模块等的知识。

    【讨论】:

    • 当我使用这种方法定义自定义模型字段时,对应模型生成的表不包含“自定义字段”条目。我得到了像Caught DatabaseError while rendering: no such column: MyTable.MyCustomField这样的异常。我错过了什么吗?
    • 发现它由于类型“ListField”而被忽略。如果我覆盖函数 get_internal_type 并返回 textField 等,那么它不会被忽略。不知道为什么 ListField 不起作用。
    • 必须重写 db_type 并提供 ListField 作为返回类型。 ListField 未在我使用的后端的数据类型中定义,因此 db_type 返回 None 并且 Django 跳过了该字段。现在在尝试保存表单时卡在 ListField 的“接口错误:错误绑定参数 4 - 可能不支持的类型”!
    • 我正在使用 djangotoolbox。我问了question here,因为我现在对此感到困惑。谢谢。
    • 啊,你有sqllite db吗?我从最初的问题中想到你在 Mongo 上
    猜你喜欢
    • 2012-03-15
    • 2011-07-24
    • 2012-02-10
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-10-23
    • 1970-01-01
    相关资源
    最近更新 更多