Django 文档解读 - 模型层(1)

Django 是开源 Python Web 框架,当初选择 Django 框架的原因之一就是它具有优雅的文档,阅读文档是利用 Django 特性来实现网站功能最直接的途径,尽管通过 Python 也可以实现 Django 提供的功能,但这不是我们想要的。本文对文档中隐含了意思的句子进行注解并分享出来,希望和大家一起进步。

本文学习解读模型层,引用的部分是文档的原文摘抄,紧随着的是原文的解读。

ForeignKey 类需要添加一个位置参数,即你想要关联的模型类名

解读: 我们知道 Django 会为每一个模型创建数据库表,将属性映射为一个数据库列。因此可以联想到 models.ForeignKey() 方法实际映射了数据库操作中创建外键的操作。而创建外键操作是在从表进行,本例中 Manufacture 为主表,Car 为从表,因此在 Car 类中调用 ForeignKey()。


在多对多(many-to-many)关系中添加添加额外的属性字段

解读: Person与 Group 在 E-R 模型中为两实体组成 m:n 联系,在数据库课程中我们学习过如果两实体满足1. 两实体组成m:n联系 2.联系带有描述属性时,必须将该联系单独转化为实体,并且将两个参与实体的主键设为外键。因此在该例子中 Membership 类就体现了这一点,其字段 person, group 为外键,data_joined, invited_reason 为联系的描述属性。注意不要忘记使用 through 参数来体现 Person 与 Group 之间存在含有描述属性的联系。


ringo = Person.objects.create(name="Ringo Starr")

解读: 对应数据库中的插入操作


>>> beatles.members.all()
# <QuerySet [<Person: Ringo Starr>]>

解读: 该操作比较有趣,在 sql 中与它等价的一个查询逻辑为 select Person.name from Person natural join Membership natural join Group


>>> beatles.members.all()
# <QuerySet [<Person: Ringo Starr>, <Person: Paul McCartney>, <Person: Ringo Starr>]>

解读: 可以看到查询结果中 Ringo Starr 出现了两次,这是正常的,因为 Person 与 Group 原本就是 m:n 联系,为了更方便查看,能不能让重复的结果只出现一次呢?这是可以的,需要利用查询的手段,在 sql 中为 select distinct xxx from xxx where xxx。Django 文档中暂时没有看到对应的 api,猜测可能会在 beatles.members.all()中以关键字参数设置的形式来实现。


你也可以将一个指向 Place OneToOneField 放到 Restaurant 当中(因为餐厅“是一个”地点);事实上,在处理这样的情况时最好使用 模型继承 ,它隐含的包括了一个一对一关系。

解读:如果两个模型的其中之一字段属性比较少,完全可以使用模型继承

AI实战-学生生活方式模式数据集分析预测实例(含24个源代码+69.54 KB完整的数据集) 代码手工整理,无语法错误,可运行。 包括:24个代码,共149.89 KB;数据大小:1个文件共69.54 KB。 使用到的模块: pandas os matplotlib.pyplot seaborn plotly.express warnings sklearn.model_selection.StratifiedShuffleSplit sklearn.pipeline.Pipeline sklearn.compose.ColumnTransformer sklearn.impute.SimpleImputer sklearn.preprocessing.OrdinalEncoder numpy sklearn.model_selection.cross_val_score sklearn.linear_model.LinearRegression sklearn.metrics.mean_squared_error sklearn.tree.DecisionTreeRegressor sklearn.ensemble.RandomForestRegressor sklearn.model_selection.train_test_split sklearn.preprocessing.PowerTransformer imblearn.pipeline.Pipeline imblearn.over_sampling.SMOTE sklearn.ensemble.AdaBoostClassifier sklearn.metrics.accuracy_score sklearn.metrics.precision_score sklearn.metrics.recall_score sklearn.metrics.f1_score optuna scipy.stats torch torch.nn torchvision.transforms torchvision.models torch.optim cv2 glob glob.glob torch.utils.data.DataLoader torch.utils.data.Dataset random.shuffle torch.utils.data.random_split torchsummary.summary matplotlib.ticker pyspark.sql.SparkSession pyspark.sql.functions.count pyspark.sql.functions.max pyspark.sql.functions.min pyspark.sql.functions.avg pyspark.sql.functions.stddev_samp pyspark.sql.functions.skewness pyspark.sql.functions.kurtosis pyspark.sql.functions pyspark.ml.feature.Tokenizer pyspark.ml.feature.VectorAssembler sklearn.preprocessing.LabelEncoder keras.models.Sequential keras.layers.Dense keras.utils.to_categorical ptitprince statsmodels.distributions.empirical_distribution.ECDF statsmodels.stats.outliers_influence.variance_inflation_factor ppscore sklearn.feature_selection.mutual_info_classif sklearn.decomposition.PCA sklearn.model_selection.StratifiedKFold sklearn.tree.DecisionTreeClassifier sklearn.metrics.balanced_accuracy_score sklearn.metrics.confusion_matrix mlxtend.plotting.plot_confusion_matrix scipy.stats.pearsonr scipy.stats.f_oneway sklearn.feature_selection.mutual_info_regression sklearn.feature_selecti
AI实战-信用卡申请风险识别数据集分析预测实例(含9个源代码+91.57 KB完整的数据集) 代码手工整理,无语法错误,可运行。 包括:9个代码,共44.98 KB;数据大小:1个文件共91.57 KB。 使用到的模块: pandas os matplotlib.pyplot seaborn wordcloud.WordCloud sklearn.model_selection.train_test_split sklearn.preprocessing.LabelEncoder sklearn.ensemble.RandomForestClassifier sklearn.metrics.accuracy_score sklearn.metrics.classification_report sklearn.metrics.confusion_matrix plotly.express plotly.subplots.make_subplots plotly.graph_objects plotly.io sklearn.base.BaseEstimator sklearn.base.TransformerMixin sklearn.preprocessing.StandardScaler sklearn.preprocessing.OrdinalEncoder sklearn.pipeline.make_pipeline sklearn.compose.make_column_transformer imblearn.over_sampling.RandomOverSampler sklearn.svm.SVC sklearn.tree.DecisionTreeClassifier sklearn.ensemble.HistGradientBoostingClassifier sklearn.ensemble.GradientBoostingClassifier sklearn.neighbors.KNeighborsClassifier sklearn.model_selection.GridSearchCV sklearn.ensemble.VotingClassifier torch lightning torchmetrics.Accuracy torch.utils.data.Dataset torch.utils.data.DataLoader numpy warnings matplotlib wordcloud.STOPWORDS collections.Counter sklearn.ensemble.ExtraTreesClassifier sklearn.ensemble.AdaBoostClassifier sklearn.ensemble.BaggingClassifier xgboost.XGBClassifier lightgbm.LGBMClassifier catboost.CatBoostClassifier sklearn.linear_model.LogisticRegression sklearn.model_selection.RandomizedSearchCV sklearn.preprocessing.MinMaxScaler imblearn.over_sampling.SMOTE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值