class Operation(models.Model):
related_operation = models.ForeignKey('self', null = True)
__related_operation = None
def __init__(self, *args, **kwargs):
super(Operation, self).__init__(*args, **kwargs)
self.__related_operation = self.related_operation
def save(self, force_insert=False, force_update=False):
if self.related_operation != self.__related_operation:
del self.__related_operation
super(Operation, self).save(force_insert, force_update)
self.__related_operation = self.related_operation
代码:
(...)
OperationFormSet = modelformset_factory(Operation, form=OperationCategoryOnlyForm)
if request.method == "POST":
formset = OperationFormSet(request.POST, queryset=Operation.objects.filter(category=category_id))
if formset.is_valid():
instances = formset.save(commit = False)
for instance in instances:
if instance.related_account is not None:
related_operation = Operation()
related_operation.related_operation = instance
related_operation.save()
instance.related_operation = related_operation
instance.save()
formset = OperationFormSet(queryset=Operation.objects.filter(category=category_id))
else:
formset = OperationFormSet(queryset=Operation.objects.filter(category=category_id))
和问题:
没有覆盖方法保存一切工作正常,但如果我改变related_operation形式,它的课程进行二,三等相关操作。
所以我决定覆盖保存方法 - 并添加__related_operation。在保存期间,它会检查related_operation是否发生变化 - 如果是这样 - 它应该删除旧的related_operation并保存(创建一个全新的related_operation)...并且它几乎可行! (新的related_operation被添加到数据库中,但是在保存后它会循环,它永远不会结束,我不知道它在做什么,我必须重新启动apache才能从服务器获得任何答案,也许这是愚蠢的错误或者非常复杂的东西 - 即时堆叠...
(当然操作类有多个字段如related_account,所以如果instance.related_account不无:是正确的)
UPDATE:
我发现问题在这里:
def __init__(self, *args, **kwargs):
super(Operation, self).__init__(*args, **kwargs)
#self.__related_operation = self.related_operation
如果我注释掉上面的一行 - 一切都会好的 - 但当然这是错误的 - 为什么它会阻止某事。
在模型的__init __(),交换两行: 自.__ related_operation = self.related_operation 超(操作,个体经营).__的init __(* ARGS,** kwargs) – karthikr
有什么区别吗? (它不会改变任何东西 - 仍然hungs) –