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

时间:2019-04-17 15:45:04

标签: python django django-models

基于django教程创建库的说明:

假设您允许用户向您的图书馆数据库添加Book模型。但是,您不希望他们向Genre添加Book模型。相反,您的数据库中已经有一个Genre模型,其中包含世界上所有列出的Genre。当用户向数据库中添加Book时,您希望数据库根据Genre摘要中的文本向Book中添加适当的Book。假设Book有一个名为TextField的摘要,并且在创建书夹时其中有sciencefiction这两个单词。然后,数据库将根据书例摘要Genre中的单词将science fiction中的TextField添加到您的书例中。对我而言,这是否发生在创建书实例时还是紧随其后。

我正在尝试通过处理日志记录/创建锻炼的网站来做同样的事情。当用户向数据库中添加workout(即书籍到图书馆)时,我希望数据库根据锻炼中的文本内容向锻炼中添加movement(即书籍类型)锻炼TextField。下面的示例:

我将锻炼结果添加到网站上,并以以下信息作为TextField

5个回合:

  • 15个引体向上
  • 30下蹲
  • 200m跑

然后,我希望数据库在锻炼实例与运动实例的TextField中使用的运动模型之间建立适当的关系:上拉,下蹲和跑步。

这样,我可以通过包含引体向上,下蹲或跑步的锻炼来搜索数据库,并且此锻炼将显示出来。每个运动模型还包含上身,下身等的“分类” ForeignKey。因此,还可以搜索仅上身等的锻炼。

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

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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

使用此代码,您的用户将可以自行选择运动和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)

元组使选择成为可能