我用Django写一个应用程序-像Twitter,我已经登录/注销面板了,已经登录的用户可以添加推文。一条推文在数据库中有3列:
class Tweet(models.Model):
content = models.CharField(max_length=140)
creation_date = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
该表格如下:
class TweetForm(forms.Form):
content = forms.CharField(label='content')
和视图:
class TweetCreationView(LoginRequiredMixin, View):
permission_required = 'twitter.add_tweet'
raise_exception = True
permission_denied_message = 'You are not allowed being there!'
def get(self, request):
form = TweetForm()
return render(request, "twitter/add_tweet.html", {"form": form})
def post(self, request):
form = TweetForm(request.POST)
if form.is_valid():
if request.user.is_authenticated():
username = request.user.username
user_id = username.id
content = form.cleaned_data.get('content')
return render(request, "twitter/add_tweet.html", {"form": form})
如何获取django中已经登录的用户并将其ID添加到发布视图表单中?
做类似的事情。我没有检查这是否有效。
if request.user.is_authenticated():
if form.is_valid():
form = form.save(commit=False)
form.user = request.user
content = form.cleaned_data.get('content')
form.save()
return render(request, "twitter/add_tweet.html", {"form": form})
好,我已经设法以一种原始的方式做到这一点:
def post(self, request):
form = TweetForm(request.POST)
if form.is_valid():
t = Tweet()
current_user = request.user
t.content = form.cleaned_data.get('content')
t.user_id = current_user.id
t.save()
if t:
return redirect(reverse("base"), locals())
return render(request, "twitter/add_tweet.html", locals())