django 多对多以人类可读的形式显示

标签 django many-to-many

我有这些模型:

CURSES=(('python','Python'),('django','Django'),...)
class Asig(models.Model):
    ...
    name = models.CharField(max_length=100, choices=CURSES)

class Profesor(AbstractUser):
    ...
    asigs = models.ManyToManyField(Asig)

然后,当我使用 ModelForm 呈现表单时,多对多字段显示为“python”字符串而不是“Python”,此外,当我查看呈现的 html 编码时,多选选项如下所示:
<option value='1'>python</option>

代替
<option value='python'>Python</option> 

最佳答案

如果您想在模型的 __str__ 中使用值“Python” , 方法,那么你应该使用 self.get_name_display()而不是 self.name :

class Asig(models.Model):
    ...
    name = models.CharField(max_length=100, choices=CURSES)

    def __str__(self):  
        # use @python_2_unicode_compatible or define __unicode__ if using Python 2
        return self.get_name_display()

您不能轻易更改多对多字段以使用 value='python'而不是 value='1' (主键)。这就是多对多字段的工作方式。

关于django 多对多以人类可读的形式显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43522102/

相关文章:

sql - 多对多的复杂 SQL 查询

mysql - 在 MySQL 多对多表中获取唯一成员资格

entity-framework - 如何在不加载所有数据的情况下删除 Entity Framework 中的多对多关系

ios - 如何正确配置/形成 NSFetchedResultsController 请求以包含多对多关系?

即使多对多关系中没有匹配的记录,SQL View 也能显示记录

php - Python 中 PHP 的 sha1 原始输出的模拟

python - 如何使用 Django 将每个图像嵌入 HTML 页面的目录中?

django - Nginx:备用域使用不同的robots.txt

python - 来自相关对象的 Django 单元测试模拟查询集

java - 将基于 Java 的 API 与 Django 结合使用