Django 中如何批量创建models? 如何抽象出这个类?

一段代码如下
fromdjango.dbimportmodels
table_name="新闻"
classPerson(models.Model):
classMeta:
db_table=table_name
app_label=table_name
title=models.CharField("title",max_length=300)
content=models.TextField("content",max_length=300)
现在的需求是,我如何把这个方法抽象出来?意思就是说,我直接给Person这个类可以传入参数,然后在里面的classMeta中可以直接用
我最早想到是这样
classPerson(models.Model):
def__init__(self,table_name):
self.table_name=table_name
classMeta:
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要健但是他们除了表名称不一样,其他都是一样~那这样不是很不灵活
当然也可以把这些数据全部放在一张表里面,但是感觉考虑到后期的数据量以及查询效率的问题,还是想把表分开~
至尊宝的传说
浏览 690回答 2
2回答

30秒到达战场

Djangomodels支持abstract=True属性,设置这个属性后,这个models不会在创建表,专门用来继承,具体的可以看官方文档ModelsAbstractbaseclasses部分.AbstractbaseclassesAbstractbaseclassesareusefulwhenyouwanttoputsomecommoninformationintoanumberofothermodels.Youwriteyourbaseclassandputabstract=TrueintheMetaclass.Thismodelwillthennotbeusedtocreateanydatabasetable.Instead,whenitisusedasabaseclassforothermodels,itsfieldswillbeaddedtothoseofthechildclass.Itisanerrortohavefieldsintheabstractbaseclasswiththesamenameasthoseinthechild(andDjangowillraiseanexception).Anexample:fromdjango.dbimportmodelsclassCommonInfo(models.Model):name=models.CharField(max_length=100)age=models.PositiveIntegerField()classMeta:abstract=TrueclassStudent(CommonInfo):home_group=models.CharField(max_length=5)TheStudentmodelwillhavethreefields:name,ageandhome_group.TheCommonInfomodelcannotbeusedasanormalDjangomodel,sinceitisanabstractbaseclass.Itdoesnotgenerateadatabasetableorhaveamanager,andcannotbeinstantiatedorsaveddirectly.

LEATH

可以试试用继承classPerson(models.Model):classMeta:db_table=table_nameapp_label=table_nametitle=models.CharField("title",max_length=300)content=models.TextField("content",max_length=300)classPerson2(Person):classMeta:db_table=table_nameapp_label=table_name或者使用元类去创建。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript