Django - переменная form_valid () не определена - PullRequest
0 голосов
/ 22 апреля 2019

Мне нужно получить profile_id пользователя, который пытается создать обзор для хранения в модели. Я могу получить атрибуты для пользователя, поскольку они встроены в django, но когда я пытаюсь использовать то, что ниже, чтобы получить profile_id, я получаю ошибку «prof is notfined».

views.py

    class ReviewCreateView(LoginRequiredMixin, CreateView):
      model = Review
      fields = ['rating', 'reviewtext']
      def get_context_data(self, **kwargs):
        context = super(ReviewCreateView, self).get_context_data(**kwargs)
        context['prof'] = Profile.objects.values_list('id', flat=True).filter(user_id=self.request.user.id)
        return context
      def form_valid(self, form):
        form.instance.product = self.request.GET.get('pk')
        form.instance.author = self.request.user
        form.instance.profile = prof
        return super().form_valid(form)

models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete = models.CASCADE)

class Review(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    profile = models.ForeignKey(Profile, on_delete=models.CASCADE)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    rating = models.PositiveSmallIntegerField(default=1, validators = [MinValueValidator(1), MaxValueValidator(5)])
    reviewtext = models.TextField()

class Product(models.Model):
    name = models.CharField(max_length=100)

1 Ответ

0 голосов
/ 22 апреля 2019

Профиль ссылается на пользователя по внешнему ключу, поэтому я могу просто написать строку ниже, также product_id получал нулевое ограничение, пока я не добавил строку self.kwargs.

def form_valid(self, form, **kwargs):
    form.instance.product_id = self.kwargs['pk']
    form.instance.author = self.request.user
    form.instance.profile = self.request.user.profile
    return super().form_valid(form)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...