一段代碼如下
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)
現(xiàn)在的需求是,我如何把這個方法抽象出來?
意思就是說, 我直接給Person 這個類可以傳入?yún)?shù),然后在里面的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)
但是失敗了,不能直接傳入?yún)?shù)? 這導(dǎo)致很不靈活,我如果有10個models要健 但是他們除了表名稱不一樣,其他都是一樣~
那這樣不是很不靈活
當(dāng)然也可以把這些數(shù)據(jù)全部放在一張表里面,但是感覺考慮到后期的數(shù)據(jù)量以及查詢效率的問題,還是想把表分開~
Django models支持abstract=True屬性, 設(shè)置這個屬性后, 這個models不會在創(chuàng)建表, 專門用來繼承, 具體的可以看官方文檔 Models Abstract base classes部分.
Abstract base classes
Abstract base classes are useful when you want to put some common information into a number of other models. You write your base class and put abstract=True in the Meta class. This model will then not be used to create any database table. Instead, when it is used as a base class for other models, its fields will be added to those of the child class. It is an error to have fields in the abstract base class with the same name as those in the child (and Django will raise an exception).
from django.db import models
class CommonInfo(models.Model):
name = models.CharField(max_length=100)
age = models.PositiveIntegerField()
class Meta:
abstract = True
class Student(CommonInfo):
home_group = models.CharField(max_length=5)
The Student model will have three fields: name, age and home_group. The CommonInfo model cannot be used as a normal Django model, since it is an abstract base class. It does not generate a database table or have a manager, and cannot be instantiated or saved directly.
可以試試用繼承
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)
class Person2(Person):
class Meta:
db_table = table_name
app_label = table_name
或者使用元類去創(chuàng)建。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內(nèi)教育集團成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。