2017-03-09 204 views
0

你好伙计我新的Django(我刚刚完成了教程),但我想我理解它的基本概念。我写在这里,因为我试图做一些“困难”使用Django的经验和搜索互联网没有给我一个解决方案。我试图做的是创建一个基于另一个模型的条目数量的动态模型。更准确地说,我可以说我有以下型号:基于查询的动态Django模型

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) 

所以,问题是我如何定义基于该得到所有标准数据库查询“ATTRS”?我可以定义与其他模型这个动态模型的关系?另外,如果用户添加更多标准,则应该更新已创建的模型。

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

+0

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

+0

模型类定义不会在数据库中创建任何表格,除非您迁移它。您可以动态创建类,但是任何模型操作都会导致错误 –

+0

@Daniel Roseman:我有点困惑,关系是写在模型上的吗?我仍然需要更新模型本身。也可以说,你说的是有效的,那么我将不得不手动为每条标准逐行添加值,并选择标准。我期望的是获得整数字段在上面的标准文本的单行上。如果我错过了某些东西或我在路上,请阻止我。 –

回答

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依赖于相关的标准。