
上QQ阅读APP看书,第一时间看更新
How to do it...
To complete this recipe, execute the following two steps:
- Modify the IdeaForm model form as follows:
# myprojects/apps/ideas/forms.py
from django import forms
from .models import Idea
class IdeaForm(forms.ModelForm):
class Meta:
model = Idea
exclude = ["author"]
def __init__(self, request, *args, **kwargs):
self.request = request
super().__init__(*args, **kwargs)
def save(self, commit=True):
instance = super().save(commit=False)
instance.author = self.request.user
if commit:
instance.save()
self.save_m2m()
return instance
- Modify the view to add or change the ideas:
# myproject/apps/ideas/views.py
from django.contrib.auth.decorators import login_required
from django.shortcuts import render, redirect, get_object_or_404
from .forms import IdeaForm
from .models import Idea
@login_required
def add_or_change_idea(request, pk=None):
idea = None
if pk:
idea = get_object_or_404(Idea, pk=pk)
if request.method == "POST":
form = IdeaForm(request, data=request.POST,
files=request.FILES, instance=idea)
if form.is_valid():
idea = form.save()
return redirect("ideas:idea_detail", pk=idea.pk)
else:
form = IdeaForm(request, instance=idea)
context = {"idea": idea, "form": form}
return render(request, "ideas/idea_form.html", context)