Объекты вопросов должны иметь значение первичного ключа, прежде чем вы сможете получить доступ к их тегам - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь сохранить как данные FK, так и теги в одной модели. ФК это пользователь. Пользователь должен отправить вопрос и теги, такие как переполнение стека. но я не могу спасти их обоих. это выглядит проблемой на мой взгляд. Не могли бы вы помочь.

ValueError в / qanda / askquestion / Вопрос объекты должны иметь значение первичного ключа, прежде чем вы сможете получить доступ к их тегам. Метод запроса: URL запроса POST: http://127.0.0.1: 8000 / qanda / askquestion / Django Версия: 2.2.4 Тип исключения: ValueError Значение исключения:
Объекты вопроса должны иметь значение первичного ключа прежде чем вы сможете получить доступ к их тегам. Местоположение исключения: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/taggit/managers.py в get , строка 424 Python Исполняемый файл : /Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 Python Версия: 3.7.4 Python Путь:
['/ Users / SRIRAMAPADMAPRABHA / Desktop / IampythonDEV / iam python ',' /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 Ответ

1 голос
/ 06 апреля 2020

Написав:

    <b>new_question=</b>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)
            <b>form.instance.user = request.user</b>
            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.

...