我有一个 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'
]
Model Form在模板中的显示方式是这样的:
{{ form.task }}
{{ form.instance.entity }}
我如何包含 {{ form.instance.type }} 的等价物?这将涉及以某种方式在同一模型形式中包含两个 __str__ 表示。我已经看到 label_from_instance 用于覆盖模型表单,但这看起来只有 ModelChoiceFields 才有可能。此外,它会将字段呈现为小部件而不是文本(如 form.instance)。
请您参考如下方法:
Django 中的模型只是类。您还可以在 Task 类中为 type 创建属性。
class Task(models.Mode):
... your code ...
@property
def entity_type(self):
return '{}'.format(self.entity.type)
然后您将在模板中调用 {{ form.instance.entity_type }}。
在这种情况下它有点矫枉过正,但在更复杂的情况下它可能是一种选择。
