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
相关产品推荐
相关产品推荐

