使用Django〜= 1.11和Python 3.6Django的模型法或計算的場數據庫
我需要存儲「計算」變量中的Django模型的數據庫字段。
這裏有一個模型:
from django.db import models
from datetime import date
class Person(model.Model)
"Last Name"
last_name = models.CharField(max_length=25)
"Birthday"
birth_date = models.DateField()
"City of birth"
city_of_birth = models.CharField(max_length=25)
我創建使用這些字段一個唯一的ID。具體地講,我conjoining每個場的一部分結合到一個字符串變量(細節如下)。我能得到這個作爲一個物業工作,但我不知道如何計算的字段存儲在數據庫中。
"Unique ID"
def get_id(self):
a = self.last_name[:2].upper() #First 2 letters of last name
b = self.birth_date.strftime('%d') #Day of the month as string
c = self.city_of_birth[:2].upper() #First 2 letters of city
return a + b + c
unique_id = property(get_id)
我想和Age做類似的事情。下面是我有一個計算:
"Age calculated from Birth Date"
def get_age(self):
return int((datetime.date.now() - self.birth_date.days)/365.25)
age = property(get_age)
所以我想給的UniqueID和年齡變量存儲在數據庫中,如在Person模型領域。這樣做的最佳做法是什麼?我是否需要首先初始化字段,然後對這些進行某種更新查詢?
注:這是我的理解是用「財產」目前的代碼工作在視圖渲染,但它並不存儲在數據庫中。
在此先感謝!請幫我改進我已有的東西。
更新: 這是我工作的代碼。問題是,我需要刪除括號在保存()段,後self.unique_id = self.get_unique_id。有人建議從數據庫中刪除年齡,並將其作爲財產。
class Person(models.Model):
unique_id = models.CharField(max_length=6, blank=True)
last_name = models.CharField(max_length=25)
birth_date = models.DateField()
city_of_birth = models.CharField(max_length=25)
@property
def get_unique_id(self):
a = self.last_name[:2].upper() #First 2 letters of last name
b = self.birth_date.strftime('%d') #Day of the month as string
c = self.city_of_birth[:2].upper() #First 2 letters of city
return a + b + c
@property
def age(self):
return relativedelta(self.birth_date.days, datetime.date.now()).years
def save(self, *args, **kwarg):
self.unique_id = self.get_unique_id
super(Person, self).save(*args, **kwarg)
def __str__(self):
return self.unique_id
你已經完成了大部分工作。你只需要爲你的模型創建一個自定義的保存功能,那樣做。 –
請提供具體代碼的答案。到目前爲止我還沒有找到功能性答案。 –