You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何让ModelChoiceField显示关联模型的详细信息

解决Django下拉菜单显示对象而非具体信息的问题

问题原因

Django的ModelChoiceField默认会调用关联模型的__str__()方法生成下拉选项的显示文本。你的Film和Screen模型未定义__str__()方法,因此默认展示对象的原始字符串表示(如Screen Object (4))。

解决方案

给Film和Screen模型添加自定义__str__()方法,返回需要显示的具体信息即可:

修改后的Film模型

class Film(models.Model):
    ageRatings =[
        ("U", "U"),
        ("PG", "PG"),
        ("12", "12"),
        ("15", "15"),
        ("18", "18"),
    ]

    id = models.AutoField(primary_key=True)
    title = models.CharField(max_length=255)
    length = models.DurationField()
    rating = models.CharField(max_length=3, choices=ageRatings, default="U")
    genre = models.CharField(max_length=50)
    poster_url = models.CharField(max_length=255, default='')
    
    # 返回影片标题作为显示文本
    def __str__(self):
        return self.title

修改后的Screen模型

class Screen(models.Model):
    id = models.AutoField(primary_key=True)
    cinema = models.ForeignKey(Cinema, on_delete=models.CASCADE, related_name='screens')
    screen_number = models.PositiveSmallIntegerField()
    seating_capacity = models.PositiveIntegerField()
    
    # 返回影厅编号作为显示文本
    def __str__(self):
        return f"影厅 {self.screen_number}"

说明

添加完成后,ModelChoiceField会自动调用这两个模型的__str__()返回值作为下拉菜单的显示内容,无需修改表单或HTML代码。

内容的提问来源于stack exchange,提问作者Conor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 01:30:02