社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

如何在ajax中使用django和jqyery提交表单并将记录添加到sqlite 3数据库

Pyleb Pyl3b • 6 年前 • 1575 次点击  

我有一个请求用户输入的表单,以便将记录保存到sqlite 3数据库中。

问题是,在我尝试将“上载图像”字段添加到表单之前,数据已正确保存。 但是现在系统第一次请求我添加空白和空 纳姆场 , 日期字段 , IS送往 .

然后显示以下错误:

文件“C:\users\lt gm\desktop\final new\djangoweb\views.py”,第160行,在post-new中 id=form.te2chira_id attributeerror:“savete2chira”对象没有属性“te2chira_id”

  • 向模型添加图片字段
  • 在表单中添加图片元素
  • 在HTML中添加了输入标记
  • 通过ajax将数据发送到视图
  • 从ajax请求获取数据并添加到view函数

模特儿

class te2chira(models.Model):
    te2chira_id = models.AutoField( primary_key=True)
    num = models.IntegerField(blank=True, null=True)
    te2chira_date = models.DateField(blank=True, null=True)
    title = models.CharField(max_length=250,default='DEFAULT VALUE', blank=True, null=True)
    description = models.CharField(max_length=500,default='DEFAULT VALUE', blank=True, null=True)
    is_sent=models.IntegerField(blank=True, null=True)
    picture = models.ImageField(upload_to = 'pictures/%d/%m/%Y/',null=True, blank=True)

    def __str__(self):
        return str(self.te2chira_id)

Py

from django import forms
from blog.models import te2chira, destination

class SaveTe2chira(forms.ModelForm):

    class Meta:
        model = te2chira
        fields = ['num','title', 'description','picture' ]

HTML

<form method="POST" class="form-style-9" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
<li>
 <input type="file" id="img" name="img"/>   
</li>
<li>
<input type="submit" class="field-style field-full align-none" id="save" value="save" />
 <script type="text/javascript">
             $(function(){
                $('#save').on('click',function(e){
                    e.preventDefault()
                    var formData = new FormData();
                    formData.append('num',$('#num').val())
                    formData.append('title',$('#title').val())
                    formData.append('text',$('#text').val())
                    formData.append('issent', 0)
                    formData.append('img', document.getElementById('img').files[0])



                $.ajax({
                    url:'/create/te2chira',
                    method:'POST',
                    data:formData,
                    processData:false,
                    contentType:false,
                    headers:{
                        'X-CSRFToken':'{{csrf_token}}'
                    }
                }).done(function(msg) {
                    document.location = "/creativePageSend.html"
                    alert('data saved')


                }).fail(function(err){
                    alert('no data was saved')
                })
            })
        })
</script>

</li>
    </ul>
</form>

在添加图像字段之前,javascript是:

<script type="text/javascript">
                 $(function(){
                    $('#save').on('click',function(e){
                        e.preventDefault()

                        num=$('#num').val()
                        title=$('#title').val()
                        text=$('#text').val()
                        issent=0
                    $.ajax({
                        url:'/create/te2chira',
                        method:'POST',
                        data: {
                            // y:year,
                            // d:date,
                            n:num,
                            ti:title,
                            te:text,
                            s:0
                        },
                        headers:{
                            'X-CSRFToken':'{{csrf_token}}'
                        }
                    }).done(function(msg) {
                        document.location = "/creativePageSend.html"
                        alert('data saved')


                    }).fail(function(err){
                        alert('no data was saved')
                    })
                })
            })
        </script>

VIEW

def post_new(request):
    if request.method =='POST':
        form = SaveTe2chira(data = request.POST, files = request.FILES)
        if form.is_valid():
            print("valid form")
            form.save()
            id=form.te2chira_id
            print(id)
            request.session['idTe2chira']=id
            return render(request,'./creativePageSend.html',{'id':id})
        else:
            print("invalid form")

在我在表单中添加图像字段之前,函数是:

def post_new(request):
    title = request.POST['ti']
    description = request.POST['te']
    num=request.POST['n']
    issent=request.POST['s']
    n=te2chira.objects.create(title=title,te2chira_date=timezone.datetime.now(),description=description,num=num,is_sent=issent)
    print(timezone.datetime.now())
    n.save()
    id=n.te2chira_id
    request.session['idTe2chira']=id
    return render(request,'./creativePageSend.html',{'id':id})

提交包含所有字段的表单并将记录保存在数据库中

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/44089
 
1575 次点击  
文章 [ 1 ]  |  最新文章 6 年前
Daniel Roseman
Reply   •   1 楼
Daniel Roseman    6 年前

savete2chira是表单,因为错误显示表单没有属性“te2chira_id”。

我不完全确定您要做什么,但看起来您想要在会话中保存新创建的对象的id。因此,您需要使用该对象,它是从form save调用返回的:

    if form.is_valid():
        obj = form.save()
        id = obj.te2chira_id
        request.session['idTe2chira'] = id

注意,你的ajax done() 函数看起来很奇怪;您不能重定向到模板,而且无论如何,您的视图已经返回了该模板的呈现值。done函数应该更新页面dom以显示该响应的内容。