2017-04-27 109 views
0

是否有可能更新字段并在保存时,它应该保存具有新更改的其他字段。更新模型字段和django中的任何其他字段

例如,我有下面的模型,

class Backup(models.Model): 
    user=models.ForeignKey(User) 
    title=models.CharField(max_length=200) 
    is_approve=models.BooleanField(default=False) 
    is_bad=models.BooleanField(default=False) 
    country=models.CharField(max_length=100) 

现在,我的主要目的是只是让is_approveTrue。我的第二个目标是更新is_approve字段旁边的其他字段,以便用户在点击模板中的approve按钮之前进行更改。

@staff_member_required 
    def activate_moderation(request, backup_id=None): 
     if id: 
      vpostmod=get_object_or_404(Backup, id=backup_id) 
      vpostmod.is_approve =1 
      vpostmod.save() 

我怎么能堵住所有领域的情况下,与旁边的保存(),为了在设置is_approve为True后进行更改。

更新到丹尼尔的问题

该模型有一个 '备份' 的ModelForm。这些表单通过Django管理员(BackupAdmin)使用相同的“备份”模型进行呈现。

我通过调用我的admin/app_name/modelname /文件夹中的change_form位置来传递我的按钮链接。

def render_change_form(self, request, context, *args, **kwargs): 
     backup= self.get_object(request, self.backup_id) 
     context.update({'backup':backup}) 
     return super(BackupAdmin, self).render_change_form(request, context, *args, **kwargs) 

而改变表单模板是这样的:

{% block submit_buttons_bottom %} 
     <div class="submit-row"> 
     {% if backup.is_approve %} 
      <p>pass</p> 
     {% else %} 
      <a href="{% url 'activate_moderation' backup.id %}" class="historylink"> <input type="button" value="{% trans 'Approve' %}" name="_approvebutton" /></a> 
      <input type="button" value="{% trans 'Reject' %}" name="_rejectbutton" /> 
      {% endif %} 
     </div> 
{{ block.super }} 
{% endblock %} 
+0

我无法理解你的问题,我害怕。您以与'is_approve'相同的方式更新其他字段。 –

+0

感谢Daniel的评论。这是怎么回事。用户提交帖子,在上线前需要获得工作人员的批准。工作人员查看在管理仪表板中提交的帖子,在员工点击批准按钮之前,他更改帖子的标题并单击批准,该批准调用activate_moderation()函数。我的问题是,如何使员工在标题中添加的新更改反映在数据库中。 activate_moderation()函数只会批准帖子,不会保存员工对其他字段所做的任何更改。你明白我的观点了吗? – YoYo

+0

我想是这样,但这里没有足够的信息来回答这个问题。如何更新字段?有某种形式吗?模板是什么样的?首先呈现模板的视图是什么? –

回答

1

你有几种选择。

第一个是覆盖保存方法上的备份模式:

#Backup 
def save(self, *args, **kwargs): 
    if self.pk: 
     previous_Backup = Backup.objects.get(self.pk).is_approve 
    super(Backup, self).save(*args, **kwargs) 
    if self.pk and self.is_approve != previous_Backup: 
     #make changes 

第二个是张贴节电信号+ django model utils field tracker绑定功能:

@receiver(post_save, sender=Backup) 
def create_change_backup(sender,instance, signal, created, **kwargs): 
    if created: 
     previous_Backup = get it from django model utils field tracker 
     #make changes 
+0

我会在我回家时试试这个。谢谢! – YoYo

相关问题