3
我想要做的是讓人們通過在charfield中寫入來標記帖子,用','分隔標籤。從CreateView中的字符串Django ManyToMany
現在這是我的模型(就我們關心的部分)
class Tag(models.Model):
name = models.CharField(max_length=100, default='')
def __unicode__(self):
return "%s" % (self.name)
class Post(models.Model):
.....
tags = models.ManyToManyField(Tag,blank=True, null=True)
然後我一個形式
class PostForm(ModelForm):
...
tags = forms.CharField(label=(u'Tags '))
class Meta:
model = Publication
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.form_method = 'post'
self.helper.add_input(Submit('submit', 'Invia'))
self.helper.form_class = 'form-horizontal'
super(PostForm, self).__init__(*args, **kwargs)
然後我我CreateView的,而我覆蓋了form_valid方法使字符串解析
class PostAdd(CreateView):
template_name = 'form.html'
form_class = PostForm
success_url='/'
def form_valid(self, form):
pub = form.save(commit=False)
pub.tags=None
pub.save()
tags=str(self.request.POST.get('tags'))
tags = tags.split(',')
tl=[]
for tag in tags:
tl.append(Tag.objects.get_or_create(name=tag))
pub.tags.add(tl)
form.save_m2m()
return HttpResponseRedirect(self.get_success_url())
我所做的就是用commit = False保存窗體,以便更改值的標籤。我試着用None
或[]
但在所有的情況下,我所背的pub.tags=None
assignme線的錯誤:
'Post' instance needs to have a primary key value before a many-to-many relationship can be used.
THX,它比我預期的更簡單。順便說一句,不確定form.save_m2m()在這種情況下是必要的。 PS:我無法將標籤添加到標籤,所以我每次將標籤添加到m2m關係。 – EsseTi