gpt4 book ai didi

python - 在 django Updateview 中保存表单集时出现问题

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:54 25 4
gpt4 key购买 nike

我是 Django 和 Stackoverflow 的新手,所以如果我的代码不标准,请接受我的道歉。我尝试创建一个博客网站。用户可以创建和更新帖子,每个帖子可以有一个或多个类别,也可以没有类别。我使用表单作为帖子,使用表单集作为类别。但是,在 Updateview 中由于某种原因我无法保存表单集!!!!

模型.py

class Post(models.Model):
title = models.CharField(max_length=128)
text = models.TextField(blank=True)
author = models.ForeignKey(User, on_delete=models.CASCADE)
created_date = models.DateTimeField(auto_now_add=True)
modified_date = models.DateTimeField(auto_now=True)
published_date = models.DateTimeField(blank=True, null=True)

def __str__(self):
return self.title

def get_absolute_url(self):
return reverse('post-detail', kwargs={'pk': self.pk})


class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
description = models.TextField(blank=True)
posts = models.ManyToManyField(Post,
blank=True,related_name='categories')

class Meta:
verbose_name_plural = 'Categories'

def __str__(self):
return self.name

forms.py

from django import forms
from blogging.models import Post, Category

class PostUpdateForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'text', 'published_date']

CATEGORY_CHOICES = [('', 'Choose from the list')]
for c in Category.objects.all():
CATEGORY_CHOICES.append((c, c))


class CategoryUpdateForm(forms.ModelForm):
class Meta:
model = Category
fields = ['name']
labels = {'name': 'Category'}
help_texts = {'name': 'Choose category for your post'}
widgets = {
'name': forms.Select(choices=CATEGORY_CHOICES)
}


CategoryFormset = forms.modelformset_factory(Category,
form=CategoryUpdateForm, extra=1,
max_num=3, can_delete=True)

views.py

from blogging.models import Post, Category
from blogging.forms import PostUpdateForm, CategoryFormset

class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = Post
template_name = 'blogging/post_update.html'
form_class = PostUpdateForm
formset_class = CategoryFormset

def form_valid(self, form):
form.instance.author = self.request.user
context = self.get_context_data()
formset = context['formset']
if formset.is_valid():
category_form = formset.save(commit=False)
category_form.posts.add(self.get_object())
category_form.save()
formset.save()

return super().form_valid(form)

def test_func(self):
post = self.get_object()
if self.request.user == post.author:
return True
return False

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
post = self.get_object()
if self.request.POST:
context['formset'] = self.formset_class(self.request.POST)
else:
context['formset'] =
self.formset_class(queryset=post.categories.all())
return context

模板

<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<fieldset class="form-group">
<legend class="border-bottom mb-4">Profile Info</legend>
{{ u_form | crispy }}
{{ p_form | crispy }}
</fieldset>
<div class="form-group">
<button class="btn btn-outline-info"
type="submit">Update</button>
</div>
</form>

最佳答案

我可以找到答案。通过使用extra-view包并使用CreateInlineView和UpdateInlineView都可以解决。 https://django-extra-views.readthedocs.io/en/latest/

关于python - 在 django Updateview 中保存表单集时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57447198/

25 4 0
文章推荐: python - 如何修复Python递归函数
文章推荐: html - 换行时段落聚类
文章推荐: javascript - 如何将一个