django - 在 django 视图中创建嵌入式表单
问题描述
我有一个规则类,规则是问题和答案的组合:
class Rule(models.Model):
name = models.CharField(max_length=32)
class Question(models.Model):
name = models.CharField(max_length=32)
rule_id = models.ForeignKey(Rule, on_delete=models.CASCADE, null=True, blank=True)
class Answer(models.Model):
name = models.CharField(max_length=32)
rule_id = models.ForeignKey(Rule, on_delete=models.CASCADE, null=True, blank=True)
我想为规则创建一个表单,其中有两个输入:一个用于问题,另一个用于答案。当我点击提交时,我应该在规则表中保存一条规则,在问题表中保存一个问题,在答案表中保存一个答案。这是我得到的最远的:我为每个模型创建了一个表单,我在一个视图方法中调用了这些表单:
def create_rule_view(request,id, sc_id):
rule = RuleForm(request.POST or None)
question= QuestionForm(request.POST or None)
answer = AnswerForm(request.POST or None)
if rule.is_valid() and question.is_valid() and answer.is_valid():
rule.save()
question.save()
answer.save()
return redirect('../')
context = {
'rule': rule,
'question': question,
'answer': answer
}
return render(request, "rule/create_rule.html", context)
但这不是我想要的视图,每个模型都是独立保存的。谁能为我找到解决方案?谢谢。
解决方案
我认为您可以像这样将这些字段添加到 RuleForm,并覆盖save
保存它们的方法:
class RuleForm(forms.ModelForm):
question = forms.CharField(required=True)
answer = forms.CharField(required=True)
class Meta:
model = Rule
fields=['name', 'question', 'answer']
def save(self, commit=False):
question = self.cleaned_data.pop('question')
answer = self.cleaned_data.pop('answer')
rule = super(RuleForm, self).save(commit=True)
Question.objects.create(rule=rule, name=question)
Answer.objects.create(rule=rule, name=answer)
return rule
现在,您只需在视图中传递规则表单:
def create_rule_view(request,id, sc_id):
rule = RuleForm(request.POST or None)
if rule.is_valid():
rule.save()
return redirect('../')
context = {
'rule': rule,
}
return render(request, "rule/create_rule.html", context)
推荐阅读
- c++ - 用于线程同步的 std::atomic 与静态变量
- c++ - 在 cout 之前调用的 c++ 析构函数
- c++ - 与函数相比,为什么在链接阶段没有类重定义错误?
- gcc - 混合 Clang 和 GCC
- react-native - 如何使 React Native TextInput 在屏幕更改后保留文本
- html - 如果有空间,则在左右浮动 Div 之间放置一个 Div,如果空间不足,则将其放置在它们下方
- ruby-on-rails - 我如何在团队、用户和组织之间关联我的模型?
- java - Eclipse Oxygen 未安装软件
- r - 根据组在数据框之间复制和相乘
- sql - 如何使用 Microsoft SQL Server Management Studio 执行 INSERT、SELECT、JOIN 和 CAST 查询?