我正在尝试将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})
我想同时向数据库提交外键和标记。我无法做标签。请让我知道你的想法?
答案 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
可能会更好。