我有一个带有ManyToManyField的模型Profile。它链接的模型是Event。我正在尝试实现一个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。
答案 0 :(得分:0)
您必须在html中呈现表单,包括csrf_token。然后使用javascript onclick javascript来激活表单的提交事件。如果您不需要用户编辑任何内容,您可以隐藏表单。