我基于此模型创建了表单:
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的小部件时,我什么也没找到。
第二件事:选择-例如,当我在选择Track对象(4)时单击Track对象(1)时,obj(4)被取消选中,而obj(1)被选中。使用shift可以选择对象之间的字段(例如obj(1)和obj(3)之间),但是用户不能选择obj(1)和obj(3)。
答案 0 :(得分:1)
要命名轨道,您需要在Track模型上定义__str__()
。
class Track(models.Model):
...
def __str__(self):
return self.title
要选择多个非连续选项,请使用Command / Control键而不是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,
}