0

I write an app in django - sth like twitter, i have already log in/log out panel, and form when already logged in user can add a tweet. A tweet has a 3 columns in database:

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)

The form looks like:

class TweetForm(forms.Form):
    content = forms.CharField(label='content')

And the view:

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})

How can i obtain an already logged in user in django and add his/her id to post view form?

  • 1
    Does this answer your question? [How to get the currently logged in user's user id in Django?](https://stackoverflow.com/questions/12615154/how-to-get-the-currently-logged-in-users-user-id-in-django) – George Udosen Jun 14 '20 at 06:55

2 Answers2

0

do something similar to this. I did not check if this is working.

  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})
ytsejam
  • 3,291
  • 7
  • 39
  • 69
  • Thanks, But when i use: if request.user.is_authenticated(): Then the error occurs: 'bool' object is not callable Without it: 'TweetForm' object has no attribute 'save' –  Jun 14 '20 at 07:36
0

Ok, I've managed to do it in kinda primitive way:

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())