在Django中提供以下模型:
class MyModel(models.Model):
name = models.CharField('This is my name'),max_length=150)
class AnotherModel(models.Model):
my_model_field_name = [...]
我想在AnotherModel.my_model_field_name
中存储MyModel.name
字段的名称(所以'这是我的名字')。
我希望它被链接,所以如果tomorow我通过“这是我的新名字”更改MyModel.name
字段的名称,我希望我之前AnotherModel.my_model_field_name
的所有记录都自动更新。
模型实例能够链接到其他模型实例,而不是模型本身,对吗?
是可能还是只是愚蠢?
编辑:
我找到了一个解决方案:Django ContentType表非常适合这样做。
使用内容类型,您可以在模型的字段上进行操作,无需模型实例(我的意思是,我的MyModel表中的一行),因此,我可以做一些类似的事情:
from django.contrib.contenttypes.models import ContentType
from .models import MyModel
# get the model I want
my_model = ContentType.objects.get_for_model(MyModel)
# get all fields of this model
fields = model._meta.get_fields()
# Iterate over the fields to find the one I want, and read it's specifications
for field in fields:
# all my stuff here
答案 0 :(得分:0)
我认为正确的做法是:
class MyModel(models.Model):
name = models.CharField('This is my name'),max_length=150)
class AnotherModel(models.Model):
my_model = models.ForeignKey(MyModel)
因此,如果您需要从AnotherModel读取MyModel名称字段,您可以这样做:
another_model = AnotherModel.objects.last()
another_model.my_model.name
通过这种方式,AnotherModel具有MyModel的链接,当您更改MyModel名称字段时,它将反映在AnotherModel对象中。