在创建两个模型后,在两个模型之间创建关系。 (Python,Django,SQLite)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在创建两个模型后,在两个模型之间创建关系。 (Python,Django,SQLite)相关的知识,希望对你有一定的参考价值。

根据用于创建库的django教程进行解释:

假设您允许用户将Book模型添加到库数据库中。但是你不希望他们在Genre上添加Book模型。相反,你的数据库中有一个Genre模型已经包含了世界上所有列出的Genre。当用户将Book添加到您的数据库时,您希望数据库根据Genre摘要中的文本将正确的Book添加到Book。假设Book有一个TextField命名摘要,当创建bookinstance时,它中包含sciencefiction。然后,数据库将根据bookinstance的摘要Genre中的单词,将science fictionTextField添加到您的bookinstance中。这种情况发生在创建实例或紧接着发生时对我来说无关紧要。

我正在尝试用一个可以处理日志记录/创建训练的网站做同样的事情。当用户将workout(即书籍到图书馆)添加到数据库时,我希望数据库根据锻炼movement中的文本为锻炼添加TextField(即书籍的类型)。示例如下:

我在网站上添加了一个Workout,其中包含以下信息:TextField

5轮:

  • 15拉上
  • 30蹲
  • 200米跑

然后,我希望数据库在锻炼实例和锻炼实例的TextField:Pull Up,Squat和Run中使用的运动模型之间创建正确的关系。

通过这种方式,我可以通过包含上拉,深蹲或跑步的锻炼来搜索数据库,并且此锻炼将显示出来。每个运动模型还包含上半身,下半身等的“分类”ForeignKey。因此,搜索也可以仅用于上半身的训练,依此类推。

我的问题是,我如何实施锻炼,运动和分类之间的模型关系?我不认为我可以在workoutmovement之间使用ForeignKey或ManytoMany关系,因为它们都需要同时添加。换句话说,用户必须在TextField中键入锻炼,然后还要添加锻炼中的运动。我希望这是用户的一步过程。他们输入锻炼,数据库根据用户键入TextField的内容添加锻炼中的运动关系。我假设为了使这个功能起作用,必须在锻炼和运动模型之间创建关系,而不是在锻炼模型创建之后。但是,我不确定如何在数据库级别创建此功能。

我目前正在使用SQLite作为数据库,因为它是Django的默认设置。

有什么建议?

答案

使用此代码,您的用户可以自行选择移动和bodyPart:

from django.db import models

movement_tuple = (
    ('Pulls up', 'Pulls up'),
    ('Squats', 'Squats'),
    ('Run', 'Run')
)

body_part = (
    ('Upper Body', 'Upper Body'),
    ('Lower Body', 'Lower Body')
)

class Workout(models.Model):
    name = models.CharField(max_length=50, default=None)
    movement = models.CharField(max_length=30, choices=movement_tuple)
    body_part = models.CharField(max_length=30, choices=body_part)
    value = models.CharField(max_length=30)

    def __str__(self):
        return(self.name)

元组是为了做出选择

以上是关于在创建两个模型后,在两个模型之间创建关系。 (Python,Django,SQLite)的主要内容,如果未能解决你的问题,请参考以下文章

Django:无法创建与一个普通模型具有一对一关系的多个模型对象

在其他两个模型之间创建关联时传递用户 ID

Django之模型层-多表操作

为两个应用程序之间共享的模型创建Gem

如何在两个集合之间建立关系?

0015 DRF框架开发(02 创建模型)