这似乎是一个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没有)。
有解决办法吗,还是这是一个实际的错误?对如何修复这个错误有什么想法吗?我对图书馆的代码库不熟悉。
谢谢!
发布于 2012-11-22 03:27:48
下面是任何使用neo4j与Django一起使用的人的合理(快速)解决方法。
此解决方案要求表单上的字段名与模型的属性具有完全相同的名称。
从该类继承表单,并在form类Meta类下设置模型:
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现在,您可以创建这样一个表单类:
class PersonForm(NeoModelForm):
name = forms.CharField(widget=forms.TextInput())
class Meta:
model = Person并且仍然能够从有效的表单中保存模型实例:
form = formclass(request.POST)
if form.is_valid():
obj = form.save()此外,提交参数将为您提供与django的modelform类相同的解决方案--但我没有费心实现save_m2m功能(这似乎与neo4j作为后端无关)。
https://stackoverflow.com/questions/13504138
复制相似问题