私はDjangoでQ/Aウェブサイトを作ろうとしていますが、そのアプリの質問の更新ビューを作成する際に問題があります。ここで Djangoでモデルインスタンスを更新できませんか?
はQuestionUpdateViewクラスclass QuestionUpdateView(UpdateView):
model = models.Question
form_class = forms.QuestionForm
template_name = 'Questionnaire/form.html'
success_url = 'question:details'
def get_success_url(self, **kwargs):
return redirect(self.success_url, self.kwargs['slug'])
def post(self, request, *args, **kwargs):
filled_form = self.form_class(request.POST)
if self.form_class.is_valid(filled_form):
model = filled_form.save(commit=False)
model.clean()
model.save()
return self.get_success_url(slug=model.slug)
であり、ここで質問モデル
class Question(models.Model):
title = models.CharField(max_length=250)
body = models.TextField()
asked_by = models.ForeignKey(User)
pub_date = models.DateTimeField(auto_now_add=timezone.now)
slug = models.SlugField(max_length=250, unique=True, default=None)
likes = models.PositiveIntegerField(editable=False, default=0)
dislikes = models.PositiveIntegerField(editable=False, default=0)
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
if self.slug is None:
self.slug = slugify(self.title)+'-'+str(self.id)
super(Question, self).save(force_insert, force_update, using, update_fields)
def get_absolute_url(self):
return reverse('question:details', kwargs={'slug': self.slug})
def __str__(self):
return self.title
コードの問題は何かがありますか?質問を更新するたびに、フォームクラスから取得したものを保存するのではなく、新しいインスタンスが作成されます。
あなたは何の理由もなく 'post'をオーバーライドしました。あなたのロジックは間違っています。そのメソッドを削除すると、クラスは期待したことを行います。 (ただし、 'get_success_url'はURLを返すべきで、リダイレクトはしません。 –