首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在表单中设置多对多字段的样式

在表单中设置多对多字段的样式
EN

Stack Overflow用户
提问于 2019-04-19 22:07:06
回答 1查看 270关注 0票数 0

我基于这个模型创建了表单:

代码语言:javascript
复制
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)

表格:

代码语言:javascript
复制
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)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-19 22:41:38

为了命名轨迹,你需要在你的轨迹模型上定义__str__()

代码语言:javascript
复制
class Track(models.Model):
    ...

    def __str__(self):
        return self.title

要选择多个不连续的选项,请使用命令/控制键而不是shift键。或者,您可以使用CheckboxSelectMultiple小部件来显示复选框。

代码语言:javascript
复制
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,
        }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55763139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档