一段代码如下
from django.db import models
table_name = "新闻"
class Person(models.Model):
class Meta:
db_table = table_name
app_label = table_name
title = models.CharField("title", max_length=300)
content = models.TextField("content", max_length=300)
现在的需求是,我如何把这个方法抽象出来?
意思就是说, 我直接给Person
这个类可以传入参数,然后在里面的class Meta
中可以直接用
我最早想到是这样
class Person(models.Model):
def __init__(self,table_name):
self.table_name = table_name
class Meta:
db_table = self.table_name
app_label = self.table_name
title = models.CharField("title", max_length=300)
content = models.TextField("content", max_length=300)
但是失败了,不能直接传入参数? 这导致很不灵活,我如果有10个models要健 但是他们除了表名称不一样,其他都是一样~
那这样不是很不灵活
当然也可以把这些数据全部放在一张表里面,但是感觉考虑到后期的数据量以及查询效率的问题,还是想把表分开~
Django models支持
abstract=True
属性, 设置这个属性后, 这个models不会在创建表, 专门用来继承, 具体的可以看官方文档 ModelsAbstract base classes
部分.An example: