gpt4 book ai didi

Django ManyToMany 来自 CreateView 中的字符串

转载 作者:行者123 更新时间:2023-12-02 07:10:13 26 4
gpt4 key购买 nike

我想做的是让人们通过在 charfield 中写入来标记帖子,并用“,”分隔标签。

现在这是我的模型(只是我们关心的部分)

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 行上的错误> 分配给我:

'Post' instance needs to have a primary key value before a many-to-many relationship can be used.

最佳答案

这里您将“tags”属性设置为 None,但您的出版物还没有主键,因此多对多关系遇到困难。

您要做的就是先保存它。

您将找到更多相关信息here

def form_valid(self, form):
pub = form.save(commit=False)
pub.save()
pub.tags=None


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)
pub.save()
form.save_m2m()
return HttpResponseRedirect(self.get_success_url())

关于Django ManyToMany 来自 CreateView 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13403010/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com