2017-04-27 204 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

相關問題