Может кто-нибудь помочь мне создать вид обновления в django? - PullRequest
0 голосов
/ 30 марта 2020

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()

1 Ответ

0 голосов
/ 30 марта 2020

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"

Вам понадобится PK в вашем URL для просмотра обновлений, чтобы он мог правильно искать экземпляр модели (вы можете переопределить это установив lookup_url_kwarg в классе IIR C)

Документы: https://docs.djangoproject.com/en/3.0/ref/class-based-views/generic-editing/#updateview

...