Django之UpdateView

模型


from .BaseModel import BaseModel
from django.db import models
from django.urls import reverse

class AdvPosition(BaseModel):
    name = models.CharField(max_length=255, help_text = "广告位名称")

    def get_absolute_url(self):
        return reverse('backend:adv-position-index')

    class Meta(BaseModel.Meta):
        db_table =  'adv_position'

模型中需要设定跳转地址,在保存成功后会根据这个地址跳转。

 

url

path('adv-position/update/<int:pk>', AdvPositionUpdateView.as_view(), name = 'adv-position-update'),

由于model使用了app_name

所以需要再urls.py中添加

app_name = 'backend'

update.html

<form class="form-horizontal" action="{{ request.get_full_path }}" method="post">
    {% csrf_token %}
   
  <div class="card-body">
    {{ form.as_ul }}
  </div>
  <div class="card-footer">
    <input type="submit" class="btn btn-info" value="submit" />
  </div>
</form>

view

跟CreateView一样,UpdateView也有很多中方式

方式1:

class AdvPositionUpdateView(UpdateView):
    model = AdvPosition # 指定模型
    template_name = 'adv-position/update.html'
    fields = ['name']

 

方式2:

需要ModelForm,

from django import forms 
from common.models import AdvPosition

class AdvPositionForm(forms.ModelForm):
    class Meta:
        model = AdvPosition
        fields = ['name']
class AdvPositionUpdateView(UpdateView):
    model = AdvPosition # 指定模型
    template_name = 'adv-position/update.html'
    form_class = AdvPositionForm

方式3:

使用get,post

class AdvPositionUpdateView(UpdateView):
    model = AdvPosition # 指定模型
    template_name = 'adv-position/update.html'
    form_class = AdvPositionForm

    def get(self, request, *args, **kwargs):
        adv_positin = AdvPosition.objects.get(id = self.kwargs['pk'])
        #initial = {'name': adv_positin.name}
        #form = self.form_class(initial)
        form = self.form_class(instance=adv_positin)
        return render(request, 'adv-position/update.html', {'form': form})

    def post(self, request, *args, **kwargs):
        adv_positin = AdvPosition.objects.get(id = self.kwargs['pk'])
        adv_positin.name = request.POST.get('name')
        adv_positin.save()
        return redirect('/backend/adv-position/index')

这里注意的是,我们需要给表单初始化已有数据

有种方式

instance和initial

form = self.form_class(instance=adv_positin)
adv = get_object_or_404(AdvPosition, pk=kwargs['pk'])
initial = {'name': adv.name}
form = self.form_class(initial)

方式4:

class AdvPositionUpdateView(UpdateView):
    model = AdvPosition # 指定模型
    template_name = 'adv-position/update.html'

    def get(self, request, *args, **kwargs):
        adv_positin = AdvPosition.objects.get(id = self.kwargs['pk'])
        #initial = {'name': adv_positin.name}
        #form = AdvPositionForm(initial)
        form = AdvPositionForm(instance=adv_positin)
        return render(request, 'adv-position/update.html', {'form': form})

    def post(self, request, *args, **kwargs):
        adv_positin = AdvPosition.objects.get(id = self.kwargs['pk'])
        adv_positin.name = request.POST.get('name')
        adv_positin.save()
        return redirect('/backend/adv-position/index')

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值