繁体   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