Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在django中以一种形式更新两个模型?_Django_Django Forms - Fatal编程技术网

如何在django中以一种形式更新两个模型?

如何在django中以一种形式更新两个模型?,django,django-forms,Django,Django Forms,好的,首先情况并不像标题中那样简单。所以我想创建一个表单,它可以基于Cycle模型创建对象,并且只更新Post模型中的一个字段(讨论中的字段是“Cycle_title”)。更重要的是,这篇文章不仅仅是一篇需要更新的文章,还有几篇(所有文章的标题都保存在Cycle.post中) 观点 class CycleCreateView(LoginRequiredMixin,BSModalCreateView): 模板名称='blog/cycle\u form.html' 形式=循环形式 def get_f

好的,首先情况并不像标题中那样简单。所以我想创建一个表单,它可以基于Cycle模型创建对象,并且只更新Post模型中的一个字段(讨论中的字段是“Cycle_title”)。更重要的是,这篇文章不仅仅是一篇需要更新的文章,还有几篇(所有文章的标题都保存在Cycle.post中)

观点

class CycleCreateView(LoginRequiredMixin,BSModalCreateView):
模板名称='blog/cycle\u form.html'
形式=循环形式
def get_form_kwargs(自我):
kwargs=super()
update(user=self.request.user)
返回kwargs
def表格_有效(自我、表格、**kwargs):
form.instance.author=self.request.user
返回super().form_有效(form)
def get_success_url(自我):
反向用户=self.request.user
返回反向('profile',kwargs={'username':反向用户})
形式

类循环形式(BSModalForm):
定义初始化(self,*args,user=None,**kwargs):
super()
如果用户不是无:
self.fields['posts'].queryset=Post.objects.filter(author=user)
类元:
模型=周期
字段=['title','description','posts']
小部件={
“posts”:forms.CheckboxSelectMultiple(),
}
模型

class Post(models.Model):
title=models.CharField(最大长度=100,唯一性=True)
content=MDTextField()
发布日期=models.DateTimeField(默认值=时区.now)
author=models.ForeignKey(用户,on_delete=models.CASCADE)
cycle_title=models.CharField(最大长度=100,默认值=“”)
课程周期(models.Model):
title=models.CharField(最大长度=100,唯一性=True)
description=models.TextField(最大长度=500,默认为“Brak opisu”)
创建日期=models.DateTimeField(默认值=时区.now)
author=models.ForeignKey(用户,on_delete=models.CASCADE)
posts=型号。ManyToManyField(Post)
我在考虑这样一个解决方案:

for i in form.cleaned_data['posts']:
    post = Post.objects.get(title=form.cleaned_data['title'][i])
    post.cycle_title = form.cleaned_data['title']
    post.save()

但我怀疑这是否是解决这个问题的好方法

已经构建了一个包来处理这个确切的场景,
django shapeshifter
。你可以在这里找到它:

基本前提是创建两个模型表单,然后将它们包含在同一模板中。给出的示例显示了如何从相同的视图和表单更新
用户
配置文件
模型。听起来这与你的问题相吻合。完全公开,我是这个软件包的一个贡献者,但它的创建正是因为像你自己一样的挫折