使用普通视图更新:
models.py
from django.db import models
from user.models import MyUser
from django.urls import reverse
# Create your models here.
class Post(models.Model):
user = models.ForeignKey(MyUser, on_delete=models.CASCADE)
title = models.CharField(max_length=255)
content = models.TextField()
posted_on = models.DateTimeField(auto_now=True, auto_now_add=False)
updated_on = models.DateTimeField(auto_now=False, auto_now_add=True)
slug = models.SlugField(blank=True, null=True)
def __str__(self):
return "%s by %s" % (self.title, self.user.get_full_name())
def get_absolute_url(self):
return reverse('post:detail', kwargs={'slug':self.slug})
class Comment(models.Model):
author = models.ForeignKey(MyUser, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
comment = models.TextField()
posted_on = models.DateTimeField(auto_now_add=True, auto_now=False)
def __str__(self):
return "%s commented on %s" % (self.author, self.post)
forms.py
from django import forms
from .models import Post, Comment
class newPost(forms.ModelForm):
class Meta:
model = Post
fields = ['title','content']
class newComment(forms.ModelForm):
class Meta:
model = Comment
fields = ['comment']
views.py
def detail(request, slug=None):
post = get_object_or_404(Post, slug=slug)
user = request.user
if request.method == 'POST':
comment = newComment(request.POST)
if comment.is_valid():
new_Comment = comment.save(commit=False)
new_Comment.author = user
new_Comment.post = post
new_Comment.save()
# successfully commented, now do whatever you want
return HttpResponse('commented')
else:
comment = newComment()
context = {
'post' : post,
'comment' : comment
}
return render(request, 'post/detail.html', context)
detail.html
<h1>{{ post.title }}</h1>
<p>{{ post.content }}</p>
<hr>
<form action="" method="post">
{% csrf_token %}
{{ comment.as_p }}
<input type="submit">
</form>
** 你在“post”上得到空白字段,因为你没有将它与任何帖子链接,但在上面的例子中,我已经向你展示了我是如何做到的,以及你如何也可以为你的项目做同样的事情 * *