首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django不在管理中保存ModelMultipleChoiceField

Django不在管理中保存ModelMultipleChoiceField
EN

Stack Overflow用户
提问于 2021-05-13 02:17:44
回答 1查看 36关注 0票数 1

我想过滤skill_ids字段,并为每个SkillType创建3个“抽象”字段,但现在它没有保存在管理网站的hard_skills字段。

模型

代码语言:javascript
复制
class Task(models.Model):
    name = models.CharField(max_length=255)
    category_id = models.ForeignKey('Category', on_delete=models.RESTRICT, null=True)
    level_id = models.ForeignKey('Level', on_delete=models.RESTRICT, null=True)
    permission_ids = models.ManyToManyField('Permission', blank=True)
    skill_ids = models.ManyToManyField('Skill', blank=True)

表格

代码语言:javascript
复制
class TaskForm(ModelForm):
    hard_skills = ModelMultipleChoiceField(Skill.objects.filter(skill_type=SkillType.HARD_SKILL),
                                           widget=FilteredSelectMultiple("Hard Skills", False), required=False)

    class Meta:
        model = Task
        exclude = ['skill_ids']

管理员

代码语言:javascript
复制
@admin.register(Task)
class TaskAdmin(admin.ModelAdmin):
    list_per_page = 25
    list_display = ['name', 'category_id', 'level_id', 'get_permissions']
    list_filter = ['category_id']
    filter_horizontal = ['permission_ids', 'skill_ids']
    form = TaskForm

    def save_model(self, request, obj, form, change):
        for hard_skill in form.cleaned_data.get('hard_skills'):
            obj.skill_ids.set(hard_skill)
        super().save_model(request, obj, form, change)
EN

回答 1

Stack Overflow用户

发布于 2021-05-13 02:28:35

ManyToManyField方法set需要一个列表,因此应该这样做:

代码语言:javascript
复制
obj.skill_ids.set(form.cleaned_data.get('hard_skills'))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67509054

复制
相关文章

相似问题

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