我基于这个模型创建了表单:
class Playlist(models.Model):
title = models.CharField(max_length=40, null=True)
description = models.CharField(max_length=500, null=True)
author = models.ForeignKey(User, default=None, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
miniature = models.ImageField(upload_to='images/playlist', default="defaults/default.png", validators=[validate_miniature_file_extension])
tracks = models.ManyToManyField(Track)表格:
class AddPlaylist(forms.ModelForm):
class Meta:
model = models.Playlist
fields = ['title', 'description', 'tracks', 'miniature']
widgets = {
'description': Textarea(attrs={'cols': 30, 'rows': 10}),
}当我渲染它的时候,“轨迹”的行为让我很惊讶。它看起来是这样的:

第一件事:名称-我想用(Track是型号,有字段"title") Track.title来命名这些曲目。我该怎么做呢?当我在ManyToManyField上搜索widgets时,我没有找到任何东西。
第二件事:选择-例如,当我点击轨迹对象(1)时,轨迹对象(4)被选中,obj(4)变为未选中,而obj(1)变为选中。使用shift可以在对象之间选择字段(例如在obj(1)和obj(3)之间),但是用户不能选择obj(1)和obj(3)。
发布于 2019-04-19 22:41:38
为了命名轨迹,你需要在你的轨迹模型上定义__str__()。
class Track(models.Model):
...
def __str__(self):
return self.title要选择多个不连续的选项,请使用命令/控制键而不是shift键。或者,您可以使用CheckboxSelectMultiple小部件来显示复选框。
from django import forms
class AddPlaylist(forms.ModelForm):
class Meta:
model = models.Playlist
fields = ['title', 'description', 'tracks', 'miniature']
widgets = {
'description': forms.Textarea(attrs={'cols': 30, 'rows': 10}),
'tracks': forms.CheckboxSelectMultiple,
}https://stackoverflow.com/questions/55763139
复制相似问题