クラス:
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をフォームで変更すると、もちろん2番目、3番目などの関連する操作になります。
そこで、saveメソッドを上書きして__related_operationを追加することにしました。保存中に、related_operationが変更されているかどうかを確認します(変更されている場合)。古いrelated_operationを削除し、保存する必要があります(完全に新しいものを作成します。related_operation)...そしてほぼ機能します。(新しいrelated_operationはデータベースに追加されますが、保存後にループします。終了することはありません。何をしているのかわかりません。サーバーから応答を取得するには、apacheを再起動する必要があります。ばかげたタイプミスか非常に複雑なものかもしれません-私は積み重ねられています...
(もちろん、操作クラスには、related_accountなどの複数のフィールドがあるため、if instance.related_accountがNoneではない場合:正しい)
アップデート:
問題はここにあることがわかりました:
def __init__(self, *args, **kwargs):
super(Operation, self).__init__(*args, **kwargs)
#self.__related_operation = self.related_operation
上記の行をコメントアウトすると-すべてがうまくいきます-しかしもちろんそれは間違っています-なぜそれがsthをブロックするのですか?