Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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 编辑表单并保存到数据库中_Python_Django - Fatal编程技术网

Python 编辑表单并保存到数据库中

Python 编辑表单并保存到数据库中,python,django,Python,Django,我有一个表单,它获取有关项目的信息并将其保存到数据库中。我正在尝试允许用户使用新的/不同的信息编辑该表单并再次保存。我在试着让它工作时遇到了一些困难。我认为问题在于,当Django验证数据时,它看到项目的slug和唯一id已经存在,并且不允许它验证数据,但我也不能完全确定这一点。非常感谢你的帮助。谢谢 #view def edit_item(request, item_id): if request.method == 'POST': item = Item.object

我有一个表单,它获取有关项目的信息并将其保存到数据库中。我正在尝试允许用户使用新的/不同的信息编辑该表单并再次保存。我在试着让它工作时遇到了一些困难。我认为问题在于,当Django验证数据时,它看到项目的slug和唯一id已经存在,并且不允许它验证数据,但我也不能完全确定这一点。非常感谢你的帮助。谢谢

#view
def edit_item(request, item_id):
    if request.method == 'POST':
        item = Item.objects.get(id=item_id)
        form = AddItem(request.POST,instance=item)
        if form.is_valid():
            item = form.save(commit=False)
            item.user = request.user
            item.is_active = True
            item.slug = slugify(item.name)
            item.save()
            return HttpResponseRedirect('thanks.html')
        else:
            form = AddItem(instance=item )
            return render_to_response('forsale.html', locals(), context_instance=RequestContext(request))

#form
class AddItem(forms.ModelForm):
    name = forms.CharField(label="Title")

    class Meta:
        model = Item
        exclude = ('user','slug','is_active',)

#model
class Item(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=30)
    slug = models.SlugField(max_length=50, unique=True)
    is_active = models.BooleanField(default=True, blank=True)
    image1 =  models.ImageField(upload_to='img')
    image2 =  models.ImageField(upload_to='img', blank=True)
    image3 =  models.ImageField(upload_to='img', blank=True)
    image_caption1 = models.CharField(max_length=200, blank=True)
    image_caption2 = models.CharField(max_length=200, blank=True)
    image_caption3 = models.CharField(max_length=200, blank=True)
    price = models.DecimalField(max_digits=8, decimal_places=2)
    quantity = models.IntegerField(default=1)
    description = models.TextField()
    created = models.DateTimeField(auto_now_add=True)
    shipping_price = models.DecimalField(decimal_places=2, max_digits=6)
    categories = models.ManyToManyField(Category)

    def save(self, *args, **kwargs):
        super(Item, self).save(*args, **kwargs)
        if not self.slug:
            self.slug = slugify(self.product.title) + "-" + str(self.id)
            self.save()

按如下方式更新视图函数以返回get请求的表单:

def edit_item(request, item_id):
    if request.method == 'POST':
        item = Item.objects.get(id=item_id)
        ....
        #your existing code
   else: #if its GET request
        item = Item.objects.get(id=item_id)
        form = AddItem(instance=item )
        return render_to_response('forsale.html', locals(), 
                   context_instance=RequestContext(request))

注意:当数据库中不存在具有item_id的项时,需要处理这种情况。在这种情况下,不要使用实例参数来实例化表单。

像这样更新视图函数以返回表单以获取请求:

def edit_item(request, item_id):
    if request.method == 'POST':
        item = Item.objects.get(id=item_id)
        ....
        #your existing code
   else: #if its GET request
        item = Item.objects.get(id=item_id)
        form = AddItem(instance=item )
        return render_to_response('forsale.html', locals(), 
                   context_instance=RequestContext(request))
注意:当数据库中不存在具有item_id的项时,需要处理这种情况。在这种情况下,不要使用实例参数来实例化表单