首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ModelForm与neo4django结合使用?

问如何将ModelForm与neo4django结合使用?
EN

Stack Overflow用户
提问于 2012-11-22 00:17:22
回答 1查看 157关注 0票数 2

这似乎是一个bug,但我只想确保我正在正确地使用API。

在neo4django上似乎不支持django的模型形式。我现在拥有的是:

简单课程:

从neo4django.db导入模型 类Person(models.NodeModel):name = models.StringProperty()

模版:

类PersonForm(forms.ModelForm):类Meta: model = Person

将触发异常:

“超级”对象没有属性“可编辑”

我把细节作为一个问题发布:https://github.com/scholrly/neo4django/issues/135

因为当Django使用模型的_meta信息查找字段信息时,它会找到一个BoundProperty,而不是一个StringProperty或属性(该属性有一个名为“editable”的成员,但BoundProperty没有)。

有解决办法吗,还是这是一个实际的错误?对如何修复这个错误有什么想法吗?我对图书馆的代码库不熟悉。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-22 03:27:48

下面是任何使用neo4j与Django一起使用的人的合理(快速)解决方法。

此解决方案要求表单上的字段名与模型的属性具有完全相同的名称。

从该类继承表单,并在form类Meta类下设置模型:

代码语言:javascript
复制
class NeoModelForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(NeoModelForm, self).__init__(*args, **kwargs)
        self._meta = getattr(self, 'Meta', None)
        if not self._meta:
            raise Exception('Missing Meta class on %s' % str(self.__class__.__name__))
        if not hasattr(self._meta, 'model'):
            raise Exception('Missing model on Meta class of %s' % str(self.__class__.__name__))

    def save(self, commit=True):
        if not self.is_valid():
            raise Exception('Failed to validate')
        instance = self._meta.model(**self.cleaned_data)
        if commit:
            instance.save()
        return instance

现在,您可以创建这样一个表单类:

代码语言:javascript
复制
class PersonForm(NeoModelForm):
    name = forms.CharField(widget=forms.TextInput())
    class Meta:
        model = Person

并且仍然能够从有效的表单中保存模型实例:

代码语言:javascript
复制
form = formclass(request.POST)
if form.is_valid():
    obj = form.save()

此外,提交参数将为您提供与django的modelform类相同的解决方案--但我没有费心实现save_m2m功能(这似乎与neo4j作为后端无关)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13504138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档