model的继承及问题

1、数据库优化问题

1、尽量避免表关联---数据操作效率低
2、尽量的避免io(读写)

2、问题

	在Django中,model可以使用继承,即子类可以继承父类,默认情况下,继承之后,使用迁移创建数据库表之后,默认会创建一个父类表,也会创建子类表,但是子类表中继承的父类的属性,不会在子类表中,而是通过外键关联父类表获得。
	默认情况不合理,应该子类是一个独立的表,避免表关联。

3、解决

	将父类model定义成抽象的类即可
	如:在父model中添加
	class Meta:
		abstract  = True
	使得model抽象化,不能实例化,继承的子模型就不会再关联父表,子模型会是独立的表,且会继承父类的模型的属性。

4、例

from django.db import models
# Create your models here.

# 定义一个动物类
class Animal(models.Model):

    a_name = models.CharField(max_length=50)

    a_leg_num= models.IntegerField(default=4)

    #使得model抽象华.不能实例化, 继承的子模型就不会在关联父表,子模型会是独立的表

    class Meta:

        abstract  = True


# 狗---继承与animal

class Dog(Animal):

    d_food = models.CharField(max_length=50)


# 猫 --- 继承与animal
class Cat(Animal):

    c_food = models.CharField(max_length=50)

5、迁移问题

	迁移的时候,可能会因为迁移文件已经有对应的迁移记录,而是的迁移失败
	解决:
		1、删除对应的表(小心操作)
		2、在django-migrations表中删除对应的记录
		2、删除migrations目录下的迁移文件
		4、再次重新迁移即可

6、注意

删除操作数据库中的数据时,要格外小心,如果不小心误删了数据库,赶紧跑,别回头...
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Qt中,QTableView是一种用于显示表格数据的控件,而QAbstractTableModel是QTableView使用的一种数据模型。如果想要在QTableView中展示自定义的数据,需要自定义一个继承自QAbstractTableModel的数据模型。 自定义QAbstractTableModel需要实现以下几个方法: 1. rowCount():返回数据模型中的行数。 2. columnCount():返回数据模型中的列数。 3. data():返回某一项的数据,可以用来在QTableView中展示数据。 4. setData():设置某一项的数据,可以用来在QTableView中编辑数据。 5. headerData():返回行或列的标签,可以用来在QTableView中显示表头。 6. flags():返回某一项的标志,用来指定该项是否可编辑、是否可选中等。 自定义QAbstractTableModel类后,可以将其与QTableView关联,通过setModel()方法来设置数据模型,使QTableView显示自定义的数据。 下面是一个简单的自定义QAbstractTableModel的例子: ```c++ class MyTableModel : public QAbstractTableModel { public: MyTableModel(QObject *parent = nullptr); int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; Qt::ItemFlags flags(const QModelIndex &index) const override; private: QList<QList<QVariant>> m_data; }; ``` 在这个例子中,自定义的数据模型类为MyTableModel,其中实现了rowCount()、columnCount()、data()、setData()、headerData()和flags()方法。m_data变量用于存储数据。自定义的数据模型类可以在需要使用表格数据的地方创建,并通过setModel()方法将其与QTableView关联起来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值