在Django中更新表单之前保存当前数据

时间:2015-08-06 08:40:58

标签: python django logging

我想在我的一个模特中创建一个变化的历史。每当我更新它时,当前数据将保存到不同的表中,同时新数据将进入另一个表。我怎么能这样做?我看到了一些示例,它们都来自管理员。但我仍然不知道它。这可能是一个noob问题,但我还在学习Django。

models.py

class tblTicket(models.Model): #new data will be entered here
    remarks = models.TextField("Action Taken", max_length=500,default='')
class LogChanges(models.Model): #table to save the changes
    prevRemarks = models.CharField(max_length=500,default='')

forms.py

class troubleTicket(ModelForm):
    class Meta:
        model = tblTicket
        fields = '__all__'

class history(ModelForm):
    class Meta:
        model = LogChanges
        fields = '__all__'

views.py

def updateTicket(request, ticket_id):
    ticketDetails=tblTicket.objects.get(id=ticket_id)
    updateTicketForm = troubleTicket(request.POST or None,instance=ticketDetails)
    if updateTicketForm.is_valid():
        updateTicketForm.save()
        return HttpResponseRedirect('/ticket/')
    return render(request,'updateTicket.html', {'updateTicketForm':updateTicketForm,'ticketDetails':ticketDetails,'ticket_id':ticket_id})

我正在使用django 1.8.3

更新

我找到了与我的问题相关的链接。但它给了我一个错误NameError: name 'tblTicket' is not defined

def make_copy(sender, **kwargs):
    obj = kwargs['instance']
    try:
        orig_obj = tblTicket.objects.get(pk=obj.pk)
    except: #If it is a new object
        orig_obj = None

pre_save.connect(make_copy, sender=tblTicket) <- this is where the error leads me 

据我所知,在这个link中,国家有模型。所以我将它切换到我的模型tblTicket。我不明白为什么它没有被定义。

1 个答案:

答案 0 :(得分:1)

c听起来你想覆盖tblTicket模型的save方法,以便创建一个新的LogChanges对象。像这样......

class tblTicket(models.Model):
    ...

    def save(self):
        super(tblTicket, self).save()
        LogChanges.objects.create(prevRemarks=self.remarks)