Skip to main content
 首页 » 编程设计

python之Django 为模型表单返回两个单独的 __str__

2024年10月01日32oomusou

我有一个 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 }}。

在这种情况下它有点矫枉过正,但在更复杂的情况下它可能是一种选择。