您好我将我的Django模型的一个字段的值设置为等于其他模型的其他字段的值。该值应该动态变化。
这是我的第一个模特
class MainModel(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(
verbose_name='Email Address',
max_length=255,
unique=True)
payment_online = models.ForeignKey(OnlinePayments, null=True, blank=True)
register_date = models.DateTimeField(default=datetime.now, blank=True)
purchase_date = models.CharField(max_length=32, default='')
is_csr = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
这是第二个模型
class OnlinePayments(models.Model):
payer_email = models.CharField(max_length=255, default=None, null=True)
payer_name = models.CharField(max_length=255, default=None, null=True)
timestamp = models.DateTimeField(auto_now_add=True, blank=True)
def __str__(self):
return self.payer_email
我想将MainModel中的purchase_date值设置为等于OnlinePayments中的时间戳值。
任何帮助都会被暗示
答案 0 :(得分:6)
您实际上不需要维护具有相同值的两个字段。
我在MainModel
上定义了一个方法,并从相关模型中获取timestamp
:
class MainModel(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(
verbose_name='Email Address',
max_length=255,
unique=True)
payment_online = models.ForeignKey(OnlinePayments, null=True, blank=True)
...
def get_purchase_date(self):
return self.payment_online.timestamp if self.payment_online else None
答案 1 :(得分:1)
我认为@alecxe提供了一个很好的答案
但是,如果您确实要将信息存储在2个位置,则可以覆盖OnlinePayments
模型上的保存方法,这样无论何时在该模型上保存记录,您都可以手动将timestamp
值保存到purchase_date
中的MainModel
。
将以下保存方法添加到您的OnlinePayments
模型中(填写评论下的purchase_date
作业)
def save(self, *args, **kwargs):
# save the value of self.timestamp into purchase_date
super(OnlinePayments, self).save(*args, **kwargs)