如何创建对象并将其另存为新实例

时间:2019-04-27 19:08:16

标签: django django-models

我的模型B具有模型A作为PK。在这个问题上,我正在创建模型A。 在我的表单清洁方法中,我执行了以下代码。我收到一个错误: “禁止使用save()来防止由于未保存的相关对象'transac'而导致数据丢失。”

我知道这可能是因为我要保存2个Transac实例。 1来自表单本身,另一个来自clean方法。但是我不知道正确的方法...

def clean(self):
    from Ticketing.models import Ticket,Transaction
    cleaned_data = super(TransactionForm, self).clean()

    computerid = cleaned_data.get('id_comp')
    newticket = Ticket(transac=Transaction(id_comp=computerid))
    newticket.save()

    return self.cleaned_data

1 个答案:

答案 0 :(得分:0)

首先,您不应该在clean()中这样做。调用它来检查表单是否有效,因此即使表单无效,您也将创建工单。代码需要进入save方法或视图本身。

第二,您需要使用由表单保存创建的Transaction实例,而不是实例化一个新实例(如错误所示,未保存实例)。

因此,假设您在视图中执行了此操作:

if form.is_valid():
    transac = form.save()
    newticket = Ticket(transac=transac)
    newticket.save()
    return redirect('wherever')