我有一个Task
模型,其中包含任务和实体的外键:
class Task(models.Model):
task = models.CharField(max_length=500)
entity = models.ForeignKey(Entity)
我有一个与Task
中的一个外键相关的模型:
class Entity(models.Model):
entity = models.CharField(max_length=50)
type = models.CharField(max_length=50)
def __str__(self):
return self.entity
Task
被放入模型表格中:
class TaskForm(ModelForm):
class Meta:
model = Task
fields = [
'task',
'entity'
]
模型表单显示在模板中,如下所示:
{{ form.task }}
{{ form.instance.entity }}
我如何包含{{ form.instance.type }}
的等价物?这将涉及以某种方式在同一模型形式中包括两个__str__
表示。我已经看到label_from_instance
用于覆盖模型表单,但这看起来只适用于ModelChoiceFields。此外,它会将字段呈现为窗口小部件而不是文本(如form.instance
)。
答案 0 :(得分:1)
在模板中,form.instance.entity
是实例的相关entity
。如果要显示type
字段,只需使用:
{{ form.instance.entity.type }}
要回答标题中的问题,每个模型只能有一个__str__
方法。您可以定义另一个返回字符串的方法或属性,但如果您只想显示type
字段,则无需执行此操作。
答案 1 :(得分:1)
Django中的模型只是类。您还可以在type
类中为Task
创建属性。
class Task(models.Mode):
... your code ...
@property
def entity_type(self):
return '{}'.format(self.entity.type)
然后您在模板中调用{{ form.instance.entity_type }}
。
在这种情况下,这有点过分,但在更复杂的情况下可能是一种选择。