我有一个用户表,想要创建一个名为deleted_users的备份表,它是用户表的克隆。当用户被删除时,我想将记录从用户表移动到deleted_users表。
class LCUser(models.Model):
email = models.EmailField(max_length=100,unique=True)
password = models.CharField(max_length=100)
first_name = models.CharField(max_length=100)
last_name=models.CharField(max_length=100)
class Meta:
db_table = "user"
class LCUserDeleted(LCUser):
deleted_at = models.DateTimeField(auto_now_add=True,null=True)
class Meta:
db_table = "deleted_users"
我尝试了如上所述,但这会创建包含所有字段的user表和包含2个字段的deleted_users表(lcusers_ptr_id和deleted_at),如何创建包含所有字段的第2个表而不是逐个输入所有字段?
答案 0 :(得分:2)
要实现您所寻找的目标,您实际上需要3个模型,一个抽象模型和两个实际模型:
class BaseLCUser(models.Model):
email = models.EmailField(max_length=100,unique=True)
password = models.CharField(max_length=100)
first_name = models.CharField(max_length=100)
last_name=models.CharField(max_length=100)
class Meta:
abstract = True
class LCUser(BaseLCUser):
class Meta:
db_table = "user"
class LCUserDeleted(BaseLCUser):
deleted_at = models.DateTimeField(auto_now_add=True,null=True)
class Meta:
db_table = "deleted_users"
通过使用抽象模型作为公共父模板,Django实际上将为每个模型创建完整的表格。
关于唯一的电子邮件,您可能希望避免在数据库级别将其设置为唯一,并通过表单进行控制,因为如果您使用电子邮件example@example.org创建和帐户,请删除它,创建另一个一个使用相同的电子邮件和删除而不是新帐户,您将尝试使用相同的电子邮件让两个已删除的用户。
另一种选择是从抽象模型中删除电子邮件字段,并将其放在每个子模型中,仅在未删除的用户中是唯一的。