我有一个包含两个日期字段的交易模型。第一个是start_date,另一个是end_date。我的目标是当我保存一笔交易时,我想更新一个只读字段,显示这两个date_field的减法。
我尝试编写一个小部件但是我只能得到一个字段。这是我的小部件:
class DueToWidget(AdminDateWidget):
def render(self,name,value,attrs=None):
from datetime import timedelta
output = []
output.append(super(AdminDateWidget, self).render(name,value,attrs))
if value:
due_to = value + timedelta(days=1)
output.append(u'<p>Diff : %s</p>' % due_to)
return mark_safe(u''.join(output))
我在选定的日期添加了一天,如何获得其他字段的值?或者还有其他方法吗?
答案 0 :(得分:1)
覆盖模型中的save()
以保存计算数据。
def save( self, *args, **kw ):
self.diff = self.end_date - self.start_date
return super( YourModelClass, self ).save( *args, **kw )
reading the Django documentation了解有关此主题的更多信息。
答案 1 :(得分:1)
如果您不介意必须刷新以查看差异(即,您只在保存模型后才能看到它),那么更简单的方法是在管理中添加一个只读字段,指向一个函数,像这样:
class MyModelAdmin(ModelAdmin):
readonly_fields = ('dates_difference',)
#add your other fields, or put it in a fieldset
fields = ('dates_difference',)
def dates_difference(self, model_instance):
return model_instance.end_date - model_instance.start_date
由于您的目标只是在模型的管理员中显示额外信息,因此这是放置代码的地方,而不是字段的小部件或模型的类。
正如readonly_fields documentation指定的那样,它的行为几乎与list_display相同,也就是说你可以将它指向模型和模型管理员的属性,也可以指向callables和方法。< / p>