Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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表单:已获取Post请求,但未保存数据_Python_Django_Django Forms - Fatal编程技术网

Python Django表单:已获取Post请求,但未保存数据

Python Django表单:已获取Post请求,但未保存数据,python,django,django-forms,Python,Django,Django Forms,所以我正试图建立一个Django网站,收集Mod应用程序来学习Django表单。除了我是个白痴,我不知道自己在做什么。 我试图做的事情是收集表单数据并保存到当前部分,然后在Django管理员中显示这些数据,这部分我还没有完成,也不知道如何完成 当我填写表格时,我得到了[06/May/2017 19:38:29]“POST/modapp HTTP/1.1”200 2354 这是我的forms.py: class Application(forms.ModelForm): class Meta

所以我正试图建立一个Django网站,收集Mod应用程序来学习Django表单。除了我是个白痴,我不知道自己在做什么。 我试图做的事情是收集表单数据并保存到当前部分,然后在Django管理员中显示这些数据,这部分我还没有完成,也不知道如何完成

当我填写表格时,我得到了
[06/May/2017 19:38:29]“POST/modapp HTTP/1.1”200 2354

这是我的forms.py:

class Application(forms.ModelForm):



class Meta:
    model = ModApplication
    fields = ('discord', 'reddit', 'serverrank','finds','serverstay','active','timezone','reason','helped','help')


def __init__(self, *args, **kwargs):
    super(Application, self).__init__(*args, **kwargs)
    self.fields['discord'].widget.attrs['placeholder'] = 'UnknownDeveloper#2068'
    self.fields['reddit'].widget.attrs['placeholder'] = '/u/UnknownDeveloper'
    self.fields['serverrank'].widget.attrs['placeholder'] = 'GEOCACHING + RANK'
    self.fields['serverstay'].label = "How long have you been on the server"
    self.fields['active'].label = "How active have you been on the server"
    self.fields['timezone'].widget.attrs['placeholder'] = 'CET'
    self.fields['reason'].label =  "Why do you want to become a mod?"
    self.fields['helped'].label =  "How have you helped the server so far?"
    self.fields['help'].label =  "How will you help the server if you'll become a mod"
models.py

class ModApplication(models.Model):
def __unicode__(self):
    return "Discord User: " + self.discord  + " aka " + self.reddit

reddit = models.CharField("Reddit Username", max_length=30)
discord = models.CharField("Discord Username", max_length=30)
serverrank = models.CharField("Server Rank", max_length=60)
finds  = models.CharField("Finds", max_length=12)
serverstay = models.CharField("Stayed on the server for",max_length=200)
active = models.CharField("Is Actice on Discord for", max_length=500)
timezone = models.CharField("Timezone", max_length=20)
reason = models.TextField("He likes to become a mod because", max_length=5000)
helped = models.TextField("He helped by", max_length=5000)
help = models.TextField("He'll help by", max_length=5000)
views.py

def formtofill(request):
form = Application() 
return render(request, 'appmod.html', {'form': form,})
if request.method == "POST":
    form = Application(request.POST)
    print(request.POST)
    if form.is_valid():
        user = form.save()
        user.discord = request.discord
        user.reddit = request.reddit
        user.serverrank = request.serverrank
        user.finds = request.finds
        user.serverstay = request.serverstay
        user.active = request.active
        user.timezone = request.timezone
        user.reason = request.reason
        user.helped = request.helped
        user.help = request.help
        user.save()
        print(user)
        messages.success(request, 'Your Mod Application has been successfully submitted!')
        print(form)
        return HttpResponse('Successful')
else:
   form_class = Application

我找了很多,但什么也没找到。我试图打印调试消息,但它们没有打印任何内容。我把消息模块,但什么也没发生。HTTPResponse只是重新加载回表单。我们将欣然接受帮助。谢谢你抽出时间。如果我遗漏了什么,请告诉我,我将编辑我的帖子。令人惊讶的是,这段代码竟然运行了,它应该会为以下内容生成属性错误:

    user.discord = request.discord
    user.reddit = request.reddit
但之所以没有,是因为执行路径从未到达该点

def formtofill(request):
   form = Application() 
   return render(request, 'appmod.html', {'form': form,})
因为返回语句

更正后的代码应该如下所示

def formtofill(request):

    form = Application() 

    if request.method == "POST":
        form = Application(request.POST)
        print(request.POST)
        if form.is_valid():
            user = form.save()
            messages.success(request, 'Your Mod Application has been successfully submitted!')
            return HttpResponseRedirect('/success_url')
    else:
       form_class = Application
    return render(request, 'appmod.html', {'form': form,})

不要提前保存表单。Save但put commit=false。 也删除返回语句,如我上面的答案所示

user = form.save(commit=False).
然后创建一个实例,但它不会写入数据库。现在你可以做作业了

    user = form.save(commit=False).
    #Now....
    user.discord = request.POST['discord']
    user.reddit = request.POST['reddit']
    user.serverrank = request.POST['serverrank']
    user.finds = request.POST['finds']
    user.serverstay = request.POST['serverstay']
    ....................
    user.save()
    return HttpResponse('Successful')
相反,您尝试将数据作为请求对象本身的属性进行访问。表单数据包含在request.POST中,然后您必须从那里访问它

而且

else:
    form = Application()

您需要实例化表单类。

是。它起作用了!!非常感谢,对不起,我是Django的白痴。对不起,从request.POST获取数据是错误的。你需要从表单中获取数据。是的。。这是正确的。我不是说这是正确的方法,但我是说这也是可以做到的。谢谢你的提醒。。从现在起我会记住的。