Python Django-form_valid()变量未定义
我需要获取试图创建要存储在模型中的评论的用户的profile_id。我可以在django中为用户获取属性,但是当我尝试使用下面的内容来获取profile_id时,会出现“prof is not defined”错误 视图.pyPython 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
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
键是值列表,而不是概要文件对象。