我想要一个ConfirmationField
字段类型。我希望这个字段像布尔字段一样工作。我不需要将这些信息存储在数据库中,而是希望将确认日期存储在单独的字段中。
class MyModel(models.Model):
confirmation = ConfirmationField()
m = MyModel()
m.confirmation # False
m.confirmation_timestamp # None
m.confirmation = True
m.save()
m.confirmation_timestamp # datetime object
m.confirmation = False
m.save()
m.confirmation_timestamp # None again
我需要将这两个字段都设为Field
个实例,我需要能够在Admin中使用它们。
我已阅读文档并检查代码,ForeignKey
使用以下代码更改其数据库列名称:
def get_attname(self):
return '%s_id' % self.name
但我无法弄清楚如何使用其余代码作为示例。我的目标似乎并不需要太多的复杂性。
我还发现ImageField
在保存模型时保存了额外的信息:
if self.field.width_field:
setattr(self.instance, self.field.width_field, self.width)
if self.field.height_field:
setattr(self.instance, self.field.height_field, self.height)
但我当然不希望confirmation
本身存储在数据库中。因为(confirmation_timestamp
- > confirmation
)None
== False
和<datetime instance>
== True
,我会造成冗余。
赞赏任何指示/想法。
感谢。
编辑:目前无法进行此操作。我最终改变了我的API。这是一个小贴士,让我知道我是如何做到的:
value = {'BooleanField': True,
'DateTimeField': datetime.datetime.now(),
'DateField': datetime.date.today(),
'IntegerField': 1,
}[instance._meta.get_field(field_name).get_internal_type()]
setattr(instance, field_name, value)
您可以在上面提到的任何类型的确认字段中设置正确的值。可以使用bool(getattr(instance, field_name)
进行确认检查。
答案 0 :(得分:5)
如果我做对了,请考虑:
class Modelname(models.Model):
"""(Modelname description)"""
confirmation_timestamp = models.DateTimeField(blank=True)
def _set_confirmation(self, value):
if not value:
self.confirmation_timestamp = None
else:
self.confirmation_timestamp = datetime.datetime.now()
def _get_confirmation(self):
return bool(self.confirmation_timestamp)
confirmation = property(_get_confirmation, _set_confirmation)
confirmation.short_description = "Confirmation"
confirmation.boolean = True # have it nicely displayed in admin