基于查询

时间:2017-03-09 12:37:38

标签: django python-2.7 django-models django-admin

大家好,我是Django的新手(我刚刚完成了教程),但我想我理解它的基本概念。我在这里写作是因为我试图做某事&#34;困难&#34;因为我目前使用django和搜索互联网的经验并没有给我一个解决方案。我想要做的是根据另一个模型的条目数创建一个动态模型。更确切地说,我得到了以下模型:< / p>

 class criteria(models.Model):
            criteria_text = models.CharField(max_length=200)
            monotonicity = models.CharField(max_length=1,choices=(('+','ASCEDING'),('-','DESCENDING')),default='+',verbose_name='Monotonicity')
            worst = models.IntegerField(default=0)
            best = models.IntegerField(default=0)

我想要做的是通过django管理面板创建我想要的所有条件模型实例,然后查询数据库中的所有creteria_text实例,并为每个criteria_text实例创建一个带有属性的模型。

因此,我想将以下标准添加到数据库中(这些是条件对象的criteria_text属性:颜色,重量,价格。

我想最终得到这样的模型:

class Alternative(models.Model):
     Color = models.IntegerField(default=0)
     Weight = models.IntegerField(default=0)
     Price = models.IntegerField(default=0)

问题是,在我的应用程序中,这个必须发生很多次,所以每次有人根据不同的标准添加替代品时我都无法建立模型。

搜索后,我发现我可以使用以下格式定义动态模型:

  attrs = {
        'name': models.CharField(max_length=32),
        '__module__': 'myapp.models'
    }
    Animal = type("Animal", (models.Model,), attrs) 

所以问题是如何定义&#34; attrs&#34;基于获取数据库中所有条件的查询?我可以定义此动态模型与另一个模型的关系吗?如果用户添加更多条件,也应更新已创建的模型。

这样的事情可能吗? 如果是这样,请告诉我路径。

1 个答案:

答案 0 :(得分:0)

我不认为定义动态模型是一个很好的解决方案(或任何地方,真的)。相反,您需要一个可以拥有与条件实例一样多的项目的关系。

可能是这样的:

class Alternative(models.Model):
    name = models.CharField(...)
    choices = models.ManyToManyField("Criteria", through="AlternativeChoice")

class AlternativeChoice(models.Model):
    alternative = models.ForeignKey('Alternative')
    criteria = models.ForeignKey('Criteria')
    value = models.IntegerField(default=0)

真实逻辑将属于表单,您需要为每个条件条目创建选项,并根据相关标准验证AlternativeChoice。