【问题标题】:Add items to a model's ManyToMany list in django using AJAX使用 AJAX 在 django 中将项目添加到模型的 ManyToMany 列表
【发布时间】:2013-06-13 21:58:32
【问题描述】:

我有一个带有 ManyToManyField 的模型 Profile。它链接到的模型是事件。我正在尝试实现一个 AJAX 函数,该函数在执行时会将事件的详细信息添加到配置文件中。

我的模型:

class Event(models.Model):
    def __unicode__(self):
        return self.title
    event_id = models.BigIntegerField(blank = 'TRUE', primary_key='TRUE')
    title = models.CharField(max_length=200, blank = 'TRUE')

class Profile(models.Model):
    user = models.OneToOneField(User)
    name = models.CharField(max_length=50)
        eventList = models.ManyToManyField(Event, blank="TRUE", null="TRUE")

    def __unicode__(self):
        return self.name

在我的 html 中,我有一个像这样调用函数的链接:

<a href="#" onclick="addEvent({{ name.event_id }}, {{ user.get_profile.id }})">

addEvent函数是这样写的:

function addEvent(id, user){
    $.ajax({
        url: 'http://127.0.0.1:8000/addEvent/',
        type: "POST",
        data: {event_id: id, profile: user},
        success: function(data){
            $('hello').html("Yes");
        }
        error: function() {
            $('hello').html("No");
        }
    });
}

最后,我的实际看法是这样的:

@csrf_exempt
@login_required
def addEvent(request):
    event_id = request.POST['event_id']
    user = request.POST['profile']
    event = Event.objects.get(id = event_id)
    user = Profile.objects.get(id = user)
    user.eventList.add(event)

    return HttpResponse(status = 201)

单击函数调用按钮,不会触发成功或错误 HTML,在检查管理站点后,我知道该事件未添加到 eventList。我认为我的问题在于我编写视图和添加到 eventList 的方式。

【问题讨论】:

    标签: ajax django


    【解决方案1】:

    您必须在 html 中呈现一个表单,包括一个 csrf_token。然后使用 javascript onclick javascript 触发表单的提交事件。如果您不需要用户编辑任何内容,您可以隐藏表单。

    【讨论】:

    • 我认为这可以在没有表格的情况下完成。我也有 csrf_exempt 装饰器。当我查看页面源代码时,会为函数调用填写正确的值,因此只需单击按钮即可使用这些值运行函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多