對於任何使用Django使用neo4j的人來說,下面是一個合理(快速)的解決方法。
此解決方案要求表單上的字段名稱與模型的屬性具有完全相同的名稱。
從該類繼承的形式,並設置模式窗體類的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()
再加上commit參數會給你th與django的modelform類相同的解決方案 - 但我沒有打算實現save_m2m功能(這與neo4j作爲後端似乎不相關)。
對於那些還沒有看到的,現在官方支持ModelForms - https://github.com/scholrly/neo4django/issues/135 –