Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django中Ajax POST请求中的外键_Python_Django_Ajax_Django Views - Fatal编程技术网

Python Django中Ajax POST请求中的外键

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

我的web应用程序有一些问题。我需要在Ajax请求中指定用户。当我尝试添加新项目时,出现错误:
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:任务匹配查询不存在。*但创建了对象(没有外键).哦,当然。我知道错误是什么了。让我详细说明我的答案