不是通过添加字段来动态地改变模型文件,而是非常糟糕我已被告知,我想通过使用可变字段列表名称(我认为)来保持一种灵活性。
因此,当将属性添加到数据库时,可以访问此属性而不更改模型文件。
我无法弄清楚如何在我的模型类中创建变量字段列表名称。 我无法通过阅读材料来寻找问题的解决方案,试验和时代已经过了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是否有正确的答案。我希望它是,这似乎是最简单的。
答案 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