问题对象必须具有主键值,然后才能访问其标签

时间:2020-04-06 19:50:12

标签: django django-views

我正在尝试将FK数据和标签都保存到同一模型中。 FK是用户。用户必须提交问题和标签,例如堆栈溢出。但是我无法保存它们两者。在我看来,这似乎有些问题。你能帮忙吗?

/ panda / askquestion /中的

ValueError 在访问问题对象之前,它们必须具有主键值。 请求方法:POST 要求网址:http://127.0.0.1:8000/qanda/askquestion/ Django版本:2.2.4 异常类型:ValueError 异常值:
在访问问题对象之前,它们必须具有主键值。 异常位置:获取第424行中的/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/taggit/managers.py Python可执行文件:/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 python版本:3.7.4 Python路径:
['/ Users / SRIRAMAPADMAPRABHA / Desktop / IampythonDEV / iampython', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Users/SRIRAMAPADMAPRABHA/Library/Python/3.7/lib/python/site-packages', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages']

Models.py 

class Question(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    question_number = models.AutoField(primary_key=True)
    question_category=models.ForeignKey(Question_Category,related_name='questioncategory',on_delete=models.CASCADE)
    question_title=models.CharField(max_length=250)
    question_slug = models.SlugField(unique=True, max_length=250)
    question_description=RichTextField()
    question_tags = TaggableManager()
    question_posted_at=models.DateTimeField(default=datetime.now,blank=True)
    question_status= models.IntegerField(choices=STATUS, default=1)
    question_updated_on= models.DateTimeField(auto_now= True)

    def __str__(self):
        return self.question_title


views.py 

@login_required
def createQuestion(request):   
   if request.method  == 'POST':
      form = QuestionAskForm(request.POST)
      if form.is_valid():
              new_question=form.save(commit=False)
              question_title = request.POST['question_title']
              new_question.slug = slugify(new_question.question_title)
              new_question=request.user
              new_question.save()
              form.save_m2m()
              messages.success(request,'You question is succesfully submitted to the forum')
              return redirect('feed')
   else:
        form = QuestionAskForm()

   return render(request,'qanda/askyourquestion.html',{'form':form})

我想同时向数据库提交外键和标记。我无法做标签。请让我知道你的想法?

1 个答案:

答案 0 :(得分:1)

通过写作:

    new_question=request.user

现在new_question不再是Question对象,而只是您使用的User对象。您应该改为编辑new_question.user对象。例如:

@login_required
def createQuestion(request):   
    if request.method  == 'POST':
        form = QuestionAskForm(request.POST)
        if form.is_valid():
            form.instance.slug = slugify(form.instance.question_title)
            form.instance.user = request.user
            form.save()
            messages.success(request,'You question is succesfully submitted to the forum')
            return redirect('feed')
    else:
        form = QuestionAskForm()
   return render(request,'qanda/askyourquestion.html',{'form':form})

在保存表单之前使用form.instance,可以避免自己进行保存过程(保存对象多对多关系)。

注意:通常,模型字段不带有模型名称的前缀。这使得 查询时间较长,并且通常希望使用(抽象)模型的继承来 继承字段,因此使用前缀会使它的重用性降低。因此它 将您的字段 question_title 重命名为title可能会更好。

相关问题