我想通过post方法在新模型中插入数据,当我通过模板调用它时该怎么做?

问题描述 投票:0回答:1

models.py

from django.db import models


class booking(models.Model):

    fname=models.CharField( max_length=50)
    lname=models.CharField( max_length=50)
    email=models.EmailField(max_length=254)
    city=models.CharField(max_length=50)
    state=models.CharField(max_length=50)
    pin=models.IntegerField()

def __str__(self):
        return self.fname

class approved(models.Model):

    fname=models.CharField( max_length=50)
    lname=models.CharField( max_length=50)
    email=models.EmailField(max_length=254)
    city=models.CharField(max_length=50)
    state=models.CharField(max_length=50)
    pin=models.IntegerField()

def __str__(self):
        return self.fname

views.py

def adminp(request):
if 'form_rejected' in request.POST and request.method=="POST":
    print("Went into reject")
    p=booking.objects.filter(id=request.POST.get('object_id','')).delete()
    print(p)
elif 'form_approved' in request.POST and request.method=="POST":
    print("went in approve")
    fname= booking.objects.filter(fname=request.POST.get('object_fname','')).values_list('fname')
    lname= booking.objects.filter(lname=request.POST.get('object_lname','')).values_list('lname')
    email= booking.objects.filter(email=request.POST.get('object_email','')).values_list('email')
    city= booking.objects.filter(city=request.POST.get('object_city','')).values_list('city')
    state= booking.objects.filter(state=request.POST.get('object_state','')).values_list('state')
    pin= booking.objects.filter(pin=request.POST.get('object_pin','')).values_list('pin')
    app= approved(fname=fname,lname=lname,email=email,city=city,state=state,pin=pin)
    app.save()
    print(fname,pin)
x=booking.objects.all()
params={'pro': x}
return render(request,'dbms/adminpanel.html',params)

模板

<form action="" method="POST">
  {% csrf_token %}
  <div class="col"><p>Firstname: {{i.fname}}</p></div>
  <div class="col"><p>Lastname: {{i.lname}}</p></div>
  <div class="col"><p>Email: {{i.email}}</p></div>
  <div class="col"><p>City: {{i.city}}</p></div>
  <div class="col"><p>Pin: {{i.pin}}</p></div>
  <input type="hidden" name="object_fname" value="{{ i.fname }}">
  <input type="hidden" name="object_lname" value="{{ i.lname }}">
  <input type="hidden" name="object_email" value="{{ i.email }}">
  <input type="hidden" name="object_city" value="{{ i.city }}">
  <input type="hidden" name="object_state" value="{{ i.state }}">
  <input type="hidden" name="object_pin" value="{{ i.pin }}">
  <input class="btn btn-success mx-2" name="form_approved" type="submit" value="Approve">
  <input type="hidden" name="object_id" value="{{ i.id }}">
  <input class="btn btn-danger mx-2" name="form_rejected" type="submit" value="Reject">  <!--Added attribute name="form_rejected"--> 

打印fname和pin的输出后的输出:

went in approve
<QuerySet [('snaTYE',)]> <QuerySet [(939393,)]>

[当我仅打印fname进行检查时,会给我一个无法插入的查询集,因此如何在批准的数据库中插入以下内容,或如何仅在queryset中获取值。

django django-models django-templates django-views
1个回答
0
投票

使用隐藏字段object_id的值获取booking实例。您不需要其他隐藏字段。如您所发现,booking.objects.filter()为您提供了一个查询集。使用booking.objects.get()获取单个实例。如果不存在与您的查询匹配的数据库条目,这并不是一个例外。然后使用booking实例中的值创建approved实例。

try:
    booking_obj = booking.objects.get(id=request.POST.get('object_id')
    approved_obj = approved.objects.create(
        fname=booking_obj.fname,
        lname=booking_obj.lname,
        email=booking_obj.email,city=booking_obj.
        city,
        state=booking_obj.state,
        pin=booking_obj.pin
    )
except booking.DoesNotExist:
    # handle error somehow

两句话:

  • 查看有关表单处理的文档,它可以使工作更加轻松。
  • 这是惯例,大写模型名称(如所有类名称),例如class Booking。我建议您遵守此约定,除非您有充分的理由不这样做。
© www.soinside.com 2019 - 2024. All rights reserved.