Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-form_valid()变量未定义_Python_Django_Django Rest Framework_Django Forms_Django Templates - Fatal编程技术网

Python Django-form_valid()变量未定义

Python Django-form_valid()变量未定义,python,django,django-rest-framework,django-forms,django-templates,Python,Django,Django Rest Framework,Django Forms,Django Templates,我需要获取试图创建要存储在模型中的评论的用户的profile_id。我可以在django中为用户获取属性,但是当我尝试使用下面的内容来获取profile_id时,会出现“prof is not defined”错误 视图.py class ReviewCreateView(LoginRequiredMixin, CreateView): model = Review fields = ['rating', 'reviewtext'] def get_c

我需要获取试图创建要存储在模型中的评论的用户的profile_id。我可以在django中为用户获取属性,但是当我尝试使用下面的内容来获取profile_id时,会出现“prof is not defined”错误

视图.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)
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)
型号.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)
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)

配置文件通过外键链接到用户,所以我可以只写下面的一行,在添加self.kwargs行之前,product_id也得到了一个空约束

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)

prof
未在该函数的任何位置定义。你希望它从哪里来?有单独的用户和个人资料链接有什么意义?这些模型已经链接。@DanielRoseman因为配置文件中有我在别处使用的字段,所以我只显示与我的问题相关的字段。@JohnGordon我试图从get_context_dataWell中获取它。您仍然可以从
self.request.user.Profile
中获取它。但正如我所说,没有理由这么做。然而,您尝试执行的操作有很多问题:您没有调用
get_context_data
;如果你有,你会得到一个命令,而不是一个属性;出于某种原因,dict的
prof
键是值列表,而不是概要文件对象。