我想要一个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
和
==,我会造成冗余True
.
任何指针/想法都表示赞赏.
谢谢.
编辑:目前看来这是不可能的.我最终改变了我的API.这是一个snipplet,让我知道我是如何做到的:
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)
.
如果我做对了,请考虑:
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