我有DetaiView对我的帖子,我想用这样的形式,这种观点,所以我决定用DetailView用FormMixin。我需要为此表格设置一些首字母,但我不知道该怎么做。这是我的代码:
models.py
class Comment(models.Model):
post = models.ForeignKey(Post, related_name="comments", on_delete=models.CASCADE)
name = models.CharField("Nick", max_length=80)
email = models.EmailField()
body = models.TextField("Body")
created = models.DateTimeField("created", auto_now_add=True)
updated = models.DateTimeField("Updated", auto_now=True)
Run Code Online (Sandbox Code Playgroud)
forms.py
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = (
"name",
"email",
"body"
)
Run Code Online (Sandbox Code Playgroud)
views.py
class PostDetailView(FormMixin, DetailView):
model = Post
form_class = CommentForm
template_name = "newspaper/post-detail.html"
def get_success_url(self):
return reverse("post-detail", kwargs={"slug": self.object.slug})
def get_context_data(self, **kwargs):
context = super(PostDetailView, self).get_context_data(**kwargs)
context["form"] = self.get_form()
return context
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):
return super().form_valid(form)
Run Code Online (Sandbox Code Playgroud)
所以我想发CommentForm这个帖子DetailView。我希望你明白:D。
在此先感谢您的帮助!
有了FormMixin你可以指定表单的初始使用initial属性:
class PostDetailView(FormMixin, DetailView):
model = Post
form_class = CommentForm
template_name = "newspaper/post-detail.html"
initial={'name': 'John'}
Run Code Online (Sandbox Code Playgroud)
或 get_initial 方法:
def get_initial(self):
return {"post": self.get_object() }
Run Code Online (Sandbox Code Playgroud)