【问题标题】:How to create model fields in a loop?如何在循环中创建模型字段?
【发布时间】:2021-01-02 12:30:36
【问题描述】:

我正在 Django 中创建一个项目,在我的“Myapp”中,models.py 中有两个模型。我正在尝试实现 model_1 的对象成为我的 model_2 的领域。我的代码示例和我尝试过的示例如下所示:-

models.py 中的 Model_1

class Skills(models.Model):
    skill_name = models.CharField(max_length=200, blank= False)

models.py 中的Model_2(我尝试过的)

class Resources(models.Model):
      pass   
     
     for skill in Skills.objects.all():
         Resources.add_to_class(skill, models.CharField(max_length=200))

我遇到的错误

NameError: name 'Resources' is not defined

谁能为我的问题提供更好的解决方案,可以创建一个模型_2(资源) 这将有来自我的模型_1(技能)的字段技能_1、技能_2、...、技能_3

【问题讨论】:

  • 不要:那将是一个可怕的想法,因为如果有一个新的Skills,你每次都必须迁移对象。

标签: python django django-models


【解决方案1】:

不要:这将是一个可怕的想法,因为如果有一个新的Skills 对象,你每次都必须迁移。

通常您在ResourceSkill 之间构造一个ManyToManyField [Django-doc],并且您可以使用through=… model [Django-doc] 添加额外的数据。例如:

class Skill(models.Model):
    # …
    pass

class Resource(models.Model):
    # …
    skills = models.ManyToManyField(
        Skill,
        through='SkillResource',
        related_name='resources'
    )
     
class SkillResource(models.Model):
    skill = models.ForeignKey(Skill, on_delete=models.CASCADE)
    resource = models.ForeignKey(Resource, on_delete=models.CASCADE)
    some_field = models.CharField(max_length=200)

有关如何在关系数据库中呈现多对多关系的更多信息,请参阅associative entity wiki page

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-10
    • 2016-07-30
    • 2013-07-05
    • 2018-07-12
    • 1970-01-01
    相关资源
    最近更新 更多