【问题标题】:How to update a M2M field in django via AJAX call如何通过 AJAX 调用更新 django 中的 M2M 字段
【发布时间】:2012-01-24 20:36:24
【问题描述】:

我正在 django 中构建用户个人资料,我希望用户在其中输入他的技能集。技能字段是 ManyToMany 字段到模型名称 Skills。下面显示了models.py 文件

class UserProfile(models.Model):

    name = models.CharField(max_length = 300, null = True, blank=True)
    location = models.CharField(max_length=500, null=True, blank=True)
    birthday = models.DateField(null = True, blank = True)
    user = models.ForeignKey(User, unique=True)
    skills = models.ManyToManyField(Skill, blank=True, null=True)


class Skill(models.Model):
    name = models.CharField(max_length=50)

    def __unicode__(self):
        return u'%s' %(self.name)

如您所见,所有字段均设置为null=True。这是因为我将这些字段保持为空,并希望用户在他/她想要的时候输入它们。所以我正在使用 AJAX 调用更新所有这些字段。我已经设法编辑了所有其他字段,但我不知道如何编辑 M2M field

我可以使用profile.skills.all() 获得与个人资料链接的所有技能的列表,但我不知道如何更新此列表。我基本上想从这个列表中添加或删除技能对象。我认为django.db.models.fields.related.ManyRelatedManager 中有一些东西可以用来编辑该字段

非常感谢任何帮助。我在这个问题上根本没有发现任何东西。有一些关于使用 ModelForm 编辑此字段的信息,但没有关于编辑单个字段的信息。

【问题讨论】:

    标签: ajax django many-to-many manyrelatedmanager


    【解决方案1】:

    要编辑 m2m 中间表,请在 ManyRelatedManager 上使用 addremove 方法。

    https://docs.djangoproject.com/en/1.3/ref/models/relations/#django.db.models.fields.related.RelatedManager.add

    确实,在 django 文档上谷歌最难的事情是 manytomanyfield 和其他连续字符串。我写了关于 formfield_for_manytomany 的博客只是为了出现在我自己的搜索结果中。

    【讨论】:

    • 我想我的问题表述有误,我不想自己编辑技能对象,但我想编辑配置文件模型中的 M2M 字段,通过编辑我的意思是我想添加或删除skill 反对我的profile.skills
    • 哦,我的错! profile.skills.add(object_id)profile.skills.remove(object_id) 将添加和删除技能。您可以通过profile.skills.through 直接过滤它们,这只是另一个 django 模型
    • 我不明白如何通过profile.skills.through 过滤它们,你能给我一个链接吗?非常感谢您的帮助
    • 你可以直接从ManyRelatedManager:profile.skills.filter(foo=bar)中过滤,已经被当前模型约束了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2020-08-13
    • 2015-01-11
    • 1970-01-01
    • 2021-08-22
    • 2019-08-09
    • 2022-01-20
    相关资源
    最近更新 更多