【问题标题】:Can anyone help me to create update view in django?谁能帮我在 django 中创建更新视图?
【发布时间】:2020-03-30 12:15:01
【问题描述】:

views.py

class DreamHeroView(CreateView):
    template_name = 'dream_hero.html'
    model = Character
    form_class = DreamHeroForm

def get(self, *args, **kwargs):
    form = DreamHeroForm()
    return render(self.request, 'dream_hero.html', {'form': form})

def post(self, *args, **kwargs):
    form = DreamHeroForm(self.request.POST, self.request.FILES or None)
    if form.is_valid():
        title = form.cleaned_data['title']
        description = form.cleaned_data['description']
        strenght = form.cleaned_data['strenght']
        power = form.cleaned_data['power']
        weapon = form.cleaned_data['weapon']
        hero_image = form.cleaned_data['hero_image']
        slug = form.cleaned_data['slug']
        post = Character(
            title=title,
            description=description,
            strenght=strenght,
            power=power,
            weapon=weapon,
            hero_image=hero_image,
            slug=slug,
            user=self.request.user,
        )
        post.save()
        return redirect('character-post')
    return render(self.request, 'dream_hero.html')

views.py

class StoryDetailView(FormMixin, DetailView):
    model = Character
    template_name = 'story.html'
    context_object_name = 'comment_set'
    form_class = CharCommentForm


def get_context_data(self, **kwargs):
    context = super(StoryDetailView, self).get_context_data(**kwargs)
    context['commenting'] = self.object.charactercomment_set.all()
    context['pro_pic'] = get_object_or_404(Author, user=self.request.user)
    context['charform'] = CharCommentForm()
    return context

def get_success_url(self):
    return reverse('story-post', kwargs={
        'slug': self.object.slug
})

def post(self, request, *args, **kwargs):
    self.object = self.get_object()
    form = self.get_form()
    if form.is_valid():
        return self.form_valid(form)
    else:
        return self.form_invalid(form)


def form_valid(self, form):
    form.instance.user = self.request.user
    form.instance.post = self.get_object()
    form.save()
    return super().form_valid(form)

form.py

class DreamHeroForm(forms.Form):
    title = forms.CharField(widget=forms.TextInput(attrs={
    'class': 'form-control',
    'placeholder': 'Name of your hero'

}))
description = forms.CharField(widget=forms.Textarea(attrs={
    'class': 'form-control',
    'placeholder': 'Story of your Hero'

}))
    slug = forms.SlugField()
    hero_image = forms.ImageField()
    strenght = forms.IntegerField()
    power = forms.IntegerField()
    weapon = forms.IntegerField()

【问题讨论】:

标签: python django crud


【解决方案1】:

Django 内置了一个UpdateView

from django.views.generic.edit import UpdateView

class MyUpdateView(UpdateView):
    model = MyModel
    fields = ["field_1", "field_2"] # or use form_class = MyForm
    template_name = "myapp/mymodel_update.html"

您需要在更新视图的 url 中添加一个 PK,以便它可以正确查找模型实例(您可以通过在 IIRC 类中设置 lookup_url_kwarg 来覆盖它)

文档: https://docs.djangoproject.com/en/3.0/ref/class-based-views/generic-editing/#updateview

【讨论】:

  • Not workingTypeError at /update-post/supe-man __init__() got an unexpected keyword argument 'instance'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多