Python Django中Ajax POST请求中的外键
我的web应用程序有一些问题。我需要在Ajax请求中指定用户。当我尝试添加新项目时,出现错误:Python Django中Ajax POST请求中的外键,python,django,ajax,django-views,Python,Django,Ajax,Django Views,我的web应用程序有一些问题。我需要在Ajax请求中指定用户。当我尝试添加新项目时,出现错误: TypeError:字段“id”应为一个数字,但未找到。问题是否有解决办法? 这是我的密码: 视图.py if request.method == 'POST': if request.is_ajax(): form = AddTask(request.POST) if form.is_valid(): form.cleaned_data
TypeError:字段“id”应为一个数字,但未找到。问题是否有解决办法? 这是我的密码: 视图.py
if request.method == 'POST':
if request.is_ajax():
form = AddTask(request.POST)
if form.is_valid():
form.cleaned_data
form.save()
user_membership = User.objects.get(id=request.user.id)
expence_object = model_to_dict(Task.objects.get(pk=user_membership))
return JsonResponse({'error': False, 'data': expence_object})
class Task(models.Model):
title=models.CharField(max_length=200)
date = models.DateTimeField(default=datetime.now,blank=True)
is_published=models.BooleanField(default=True)
usertask=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, null=True, blank=True)
型号.py
if request.method == 'POST':
if request.is_ajax():
form = AddTask(request.POST)
if form.is_valid():
form.cleaned_data
form.save()
user_membership = User.objects.get(id=request.user.id)
expence_object = model_to_dict(Task.objects.get(pk=user_membership))
return JsonResponse({'error': False, 'data': expence_object})
class Task(models.Model):
title=models.CharField(max_length=200)
date = models.DateTimeField(default=datetime.now,blank=True)
is_published=models.BooleanField(default=True)
usertask=models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, null=True, blank=True)
Ajax表单
$('#taskpost').submit(function (e) {
// console.log("Creating the book");
e.preventDefault();
// get the form data
var formData = {
'title': $('#id_title').val(),
csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
contentType: 'application/x-www-form-urlencoded',
encode: true,
};
$.ajax({
type: 'POST',
url: 'create/',
data: formData,
dataType: 'json',
}).done(function (data) {
您之所以会出现这些错误,是因为您在视图中没有正确处理问题。首先,在创建
Task
对象时,您保存它时没有设置usertask
值,因此设置为null
另一方面,当尝试在此处获取刚创建的对象时,由于将一个用户
实例传递给参数pk,所以这是错误的。它应该是一个整数
此外,据我所见,您在这里试图完成的是:expence\u object=model\u to\u dict(Task.objects.get(pk=user\u membership))
是获取刚刚创建的模型,但这在您的情况下是完全不必要的,而且您做得不对。请改为尝试以下代码:
form = AddTask(request.POST)
if form.is_valid():
# form.cleaned_data <-- This line is unnecessary here too
obj = form.save(commit=False) # Prevent saving before assigning usertask
obj.usertask = request.user
obj.save()
expence_object = model_to_dict(obj)
return JsonResponse({'error': False, 'data': expence_object})
form=AddTask(request.POST)
如果form.is_有效():
#form.cleaned_data不确定这是否解决了所有问题,但这一行:expence_object=model\u to_dict(Task.objects.get(pk=user_membership))
引发异常,因为它需要一个整数,而您正在传递一个模型实例。它应该是:expence\u object=model\u to_dict(Task.objects.get(pk=user\u membership.pk))
@revliscano我更改了它,但出现了一个错误:*raise self.model.DoesNotExist(main.models.Task.DoesNotExist:任务匹配查询不存在。*但创建了对象(没有外键).哦,当然。我知道错误是什么了。让我详细说明我的答案