Django:将模型字段链接到另一个模型字段配置名称

时间:2018-01-25 14:56:32

标签: django django-models

在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

1 个答案:

答案 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对象中。