django模型类中的灵活字段列表名称

时间:2011-11-03 05:24:48

标签: django django-models

不是通过添加字段来动态地改变模型文件,而是非常糟糕我已被告知,我想通过使用可变字段列表名称(我认为)来保持一种灵活性。

因此,当将属性添加到数据库时,可以访问此属性而不更改模型文件。

我无法弄清楚如何在我的模型类中创建变量字段列表名称。 我无法通过阅读材料来寻找问题的解决方案,试验和时代已经过了15个小时并且还在计算中。

有人能指出我正确的方向吗?

新编辑

这是我想要实现的目标。

添加属性后,我将其添加到表格中。

    c = 'newattributename'

    conn = mdb.connect('localhost', 'jamie', '########', 'website')
    cursor = conn.cursor()
    cursor.execute("alter table mysite_weightsprofile add column %s integer not null; SET @rank=0; UPDATE mysite_weightsprofile SET %s = @rank:=@rank+1 order by %s DESC;" %  (c, c, a))
    cursor.close()
    conn.close()

现在,在我的模特课中我有

class WeightsProfile(models.Model):
    1attributes = models.IntegerField()
    2attributes = models.IntegerField()
    3attributes = models.IntegerField()

class UserProfile(WeightsProfile):
    user = models.ForeignKey(User, unique=True)
    aattributes = models.CharField()
    battributes = models.CharField()
    cattributes = models.CharField()

现在,我想要做的就是访问表中添加但未添加到模型文件中的新属性。

sberry2A是否有正确的答案。我希望它是,这似乎是最简单的。

3 个答案:

答案 0 :(得分:2)

我可能不会关注你的问题,但假设你有一些模型,比如Person,它会开始有一些已定义的字段,但将来可能会增加几个......

class Person(models.Model):

    fname = models.CharField(max_length=255)
    lname = models.CharField(max_length=255)
    age = models.IntegerField()
    # more fields to come

然后你可以使用PersonAttribute模型......

class PersonAttribute(models.Model):

    name = models.CharField(max_length=32)
    value = models.CharField(max_length=255)

然后你可以向你的Person添加一个ManyToMany关系字段......

    attributes = models.ManyToManyField(PersonAttribute)

或类似的东西。

答案 1 :(得分:0)

我真的不明白你想要做什么,但South是处理模型变更的好系统。它进行迁移,以便它了解您所做的更改,并知道如何在数据库中以可用于开发站点和生产的方式更改它们。

答案 2 :(得分:0)

我不明白你们之后是什么,JT,但我真的怀疑南方(见@Dougal)会帮助你,如果你想要归结为“查看相关的数据库表知道哪些字段模型应该在读取时间。但不是写时间。“ South非常适合发展模式/模型,但不是在运行时,并且在模型的行/实例之间并不矛盾。在运行时黑客模型绝对是一个受伤的世界。

实际上,Django的ORM不是为动态字段构建的(至少现在是这样) - 它是为了抽象编写SQL并加速开发RDBMS而不是无模式/ NoSQL的东西而构建的。

说到这一点,如果有人给我一个有效说“我们不知道该模型必须存储哪些字段”的规范,我建议我们尝试MongoDB获取该数据(与Postgres一起用于传统关系数据) ,可能是通过MongoEngine