【发布时间】:2017-12-15 23:44:03
【问题描述】:
我正在创建一个BaseModel 并在Channel 中继承它。这个BaseModel 在执行save() 时会有更多的逻辑。我在完成迁移并生成表时遇到问题。
我的api_channel 表是使用basemodel_ptr_id 引用BaseModel 表创建的。
但是,我正在寻找的是将BaseModel 中的所有字段都继承到Channel 模型中。我的数据库中也不需要basemodel 表。
我已经通过官方Django Doc
请帮忙。
BaseModel.py
from django.db import models
from django.utils import timezone
class BaseModel(models.Model):
created_on = models.DateTimeField(editable=False)
updated_on = models.DateTimeField()
# # To make the BaseModel abstract
class Meta:
abstract = True
def __init__(self, *args, **kwargs):
self._meta.db_table = self.__class_.__name__.lower()
super(BaseModel, self).__init__(*args, **kwargs)
def save(self, *args, **kwargs):
''' On save, update_at timestamp '''
if not self.id:
self.created_on = timezone.now()
self.updated_on = timezone.now()
return super(User, self).save(*args, **kwargs)
Channel.py
from django.db import models
from api.models import base
class Channel(base.BaseModel):
name = models.CharField(max_length=50)
description = models.CharField(max_length=1000)
【问题讨论】:
-
在
Meta类中设置proxy = True而不是abstract = True有什么原因吗? -
@Railslide 我的错……在
abstract失败后,我尝试了所有其他模型继承。这就是proxy的来源。
标签: python django django-1.8 python-3.2