Django模型表单发布到当前用户
我正在尝试制作一个表单,当前登录的用户可以发布一个新的状态。我用的是模型表格。我在加载页面时没有收到任何错误,但是似乎没有发布任何数据。所以我的问题是,如何让它为当前用户发布一个新的状态?这是我目前的代码: 我的看法是:Django模型表单发布到当前用户,django,django-forms,Django,Django Forms,我正在尝试制作一个表单,当前登录的用户可以发布一个新的状态。我用的是模型表格。我在加载页面时没有收到任何错误,但是似乎没有发布任何数据。所以我的问题是,如何让它为当前用户发布一个新的状态?这是我目前的代码: 我的看法是: @login_required def post(request, username): logged_user = request.user newpostform = PostForm(instance=request.user.get_profile(),
@login_required
def post(request, username):
logged_user = request.user
newpostform = PostForm(instance=request.user.get_profile(), data=request.POST)
if newpostform.is_valid():
newpostform.save()
newpostform = PostForm()
context = {'newpostform': newpostform,}
return render(request, 'twitterclone/newpost.html', context)
我的表格:
class PostForm(ModelForm):
class Meta:
model = Post
我的模型:
class Profile(models.Model):
user = models.ForeignKey(User)
bio = models.TextField()
image = models.ImageField(upload_to='images/%Y/%m/%d')
following = models.ManyToManyField('self', blank = True, null = True)
def __unicode__(self):
return unicode(self.user)
class Post(models.Model):
profile = models.ForeignKey(Profile)
body = models.CharField(max_length=140)
pub_date = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return unicode(self.body[:50])
我的模板:
<form action="" method="POST">
{% csrf_token %}
{{newpostform.body}}
<button>Tweet It</button>
</form>
{%csrf_令牌%}
{{newpostform.body}
推特
您的模板不包含必须填写的个人资料
字段,因此您的表单永远无效。因为您每次都在创建一个新表单,所以您不会看到错误消息,因为您的模板无论如何都不会显示它
在表单定义中指定只需要正文:
class PostForm(ModelForm):
class Meta:
model = Post
fields = ['body']
这将使表单生效。您还必须明确设置配置文件
字段:
if newpostform.is_valid():
newpost = newpostform.save(commit=False)
newpost.profile = request.user.get_profile()
newpost.save()
而表单构造函数的实例
参数并没有做您认为应该做的事情-这是为了传递表单表示的模型的现有实例以进行编辑
我会这样改写这个观点:
@login_required
def post(request, username):
newpostform = PostForm(data=request.POST)
if newpostform.is_valid():
newpost = newpostform.save(commit=False)
newpost.profile = request.user.get_profile()
newpost.save()
newpostform = PostForm()
context = {'newpostform': newpostform,}
return render(request, 'twitterclone/newpost.html', context)
在这里,我不会将表单重新分配给新的空表单,除非刚刚提交的表单是有效的。这将允许模板显示错误消息