Как я могу получить доступ к объекту в Mixin через диспетчер?

Итак, я пытаюсь использовать Mixin, и цель состоит в том, чтобы проверить, является ли запросчик владельцем объекта (владелец - это поле в моей модели).

Однако, я не могу сделать это, с результатом 'TweetsUpdateView' object has no attribute 'object', что не так в моем коде?

Мои модели

class Tweets(models.Model):
    description = models.TextField(blank=True, null=False, default="", max_length=255)
    createdAt = models.DateTimeField(auto_now_add=True, null=True, blank=True)
    updatedAt = models.DateTimeField(auto_now=True)

    owner = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        blank=True,
        null=True,
        on_delete=models.SET_NULL,
        related_name="owner_tweets_set",
    )
    user_likes = models.ManyToManyField(settings.AUTH_USER_MODEL)

Мое мнение

class OwnerRequiredMixin(UserPassesTestMixin):
    def dispatch(self, request, *args, **kwargs):
        if self.object.owner != self.request.user:
            return HttpResponseForbidden()
        return super(OwnerRequiredMixin, self).dispatch(request, *args, **kwargs)


class TweetsUpdateView(
    LoginRequiredMixin,
    OwnerRequiredMixin,
    UpdateView,
):
    model = Tweets
    # fields = ["description"]
    # template_name = "tweets_form.html"
    template_name_suffix = "_form"
    form_class = TweetForm

    def form_invalid(self, form):
        print("form is invalid")
        return HttpResponse("form is invalid.. this is just an HttpResponse object")

    # slug_field = "id"
    # slug_url_kwarg = "tweet_id"
    # success_url = reverse_lazy("tweets:twitter")
    success_url = reverse_lazy("tweets:twitter")

вы можете получить доступ к объектам, используя self.object = self.get_object() поскольку он еще не был вызван

Вернуться на верх