我有一个 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 }}
。
在这种情况下它有点矫枉过正,但在更复杂的情况下它可能是一种选择。
关于python - Django 为模型表单返回两个单独的 __str__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47639263/