簡體   English   中英

在 django-taggit 中,標簽不與問題帖子一起保存

[英]In django-taggit tag is not save along with question post

當我創建 djanog 問題模型時,所有字段都已創建,但未使用問題 model 創建標簽,但在 django 管理員 taggit 中分別創建標簽

model.py

class Question(models.Model):
 id = models.UUIDField(default=uuid.uuid4, unique=True,primary_key=True,editable=False)
nameuser = models.ForeignKey(Profile,on_delete=models.CASCADE)
timestamp = models.DateTimeField(auto_now_add=True)
content = RichTextUploadingField()
tag = TaggableManager()
def __str__(self):
  return self.content
class Meta:
  ordering = ['-timestamp']

視圖.py

def createQue(request):
User = request.user.profile
form=QuestionForm()
if request.method =='POST':
    form=QuestionForm(request.POST,request.FILES)
    if form.is_valid():
        content = form.cleaned_data["content"]
        tag = form.cleaned_data["tag"]
        print(tag)
        blog = form.save(commit=False)
        blog.nameuser=User
        blog.content = content
        blog.tag=tag
        blog.save()
 
        return redirect('home')
context={'form':form}
return render(request,'blog_form.html',context)

forms.py

class QuestionForm(forms.ModelForm):
class Meta:
    model = Question
    fields = ['content','tag']
   
def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.fields['content'].widget.attrs.update({'class':'form-control ','placeholder':'Enter your question'})
    self.fields['tag'].widget.attrs.update({'class':'tag_inputbar','placeholder':'Enter Tags here'})

TaggableManager是一個帶有一些額外邏輯的ManyToManyField 因此,您應該這樣保存它,或者只是讓表單正常工作,所以:

def createQue(request):
    form=QuestionForm()
    if request.method =='POST':
        form = QuestionForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.nameuser = request.user.profile
            form.save()
            return redirect('home')

    context={'form':form}
    return render(request, 'blog_form.html', context)

對於 many2many,如果使用commit=False ,則需要使用save_m2m()和 form

def createQue(request):
    User = request.user.profile
    form=QuestionForm()
    if request.method =='POST':
        form=QuestionForm(request.POST,request.FILES)
        if form.is_valid():
            content = form.cleaned_data["content"]            
            blog = form.save(commit=False)
            blog.nameuser=User
            blog.content = content
            blog.save()
            form.save_m2m()
    
            return redirect('home')
    context={'form':form}
    return render(request,'blog_form.html',context)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM