【问题标题】:Django admin: sending signal on field changeDjango admin:在字段更改时发送信号
【发布时间】:2011-09-09 02:11:28
【问题描述】:

当且仅当表单字段“状态”更新时,我才需要触发信号。该信号工作正常,但无论是否向表单提交任何更改都会触发。

下面是我在 admin.py 中对 OrderAdmin 类的 save_model 覆盖:

def save_model(self, request, obj, form, change):
    if not change:
        if not request.user.is_superuser:
            obj.organization = request.user
    if Order().is_dirty():
        custom_signals.notify_status.send(sender=self, status=obj.status)  
    obj.save()  

这是我的模型:

class Order(DirtyFieldsMixin, models.Model):

StatusOptions = (
  ('Pending Confirmation', 'Pending Confirmation'),
  ('Confirmed', 'Confirmed'),
  ('Modified', 'Modified'),
  ('Placed', 'Placed'),
  ('En Route', 'En Route'),
  ('Completed', 'Completed'),
  ('Cancelled', 'Cancelled'),
  )

organization = models.ForeignKey(User, related_name='orders', default=1, help_text='Only visible to admins.')
status = models.CharField(max_length=50, choices=StatusOptions, default=1, help_text='Only visible to admins.')
order_name = models.CharField(max_length=22, blank=True, help_text='Optional. Name this order for easy reference (example: Munchies)')
contact_person = models.ForeignKey(Contact, help_text='This person is in charge of the order. We may contact him/her regarding this order.')
delivery_date = models.DateField('delivery day', help_text='Please use YYYY-MM-DD format (example: 2011-11-25)')

【问题讨论】:

  • 建议:粘贴更多代码。从这个 sn-p 中无法分辨出任何东西。
  • 我添加了整个 save_model 覆盖以及我的模型。

标签: python django django-admin


【解决方案1】:

您可以尝试覆盖 ModelAdmin.get_object 以向您的实例添加标志:

def get_object(self, request, object_id):
    o = super(Order, self).get_object(request, object_id)
    if o:
        o._old_status = o.status
    return o

现在您可以在save_model 中使用if o.status != o._old_status

【讨论】:

  • 这在将“if o.status != o._old_status”更改为“if obj.status != obj._old_status”后起作用。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-02
  • 2016-08-11
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 2012-05-31
相关资源
最近更新 更多