我得到了模特考试和问题。简化代码:
class Exam {
public function questions() {
return $this->hasMany('Question');
}
// ...
}
class Question {
public function exam() {
return $this->belongsTo('Exam');
}
// ...
}
现在我想上传一份包含考试数据的文件。解析器类应创建考试而不保存。然后逐渐创建问题并添加到考试中。最后,一切都应保存在交易中。
class ExamParser {
$exam = new Exam();
// ...
while ($linesRemaining) {
$question = new Question();
// ...
$exam->questions[] = $question; // something like this?
}
$exam->saveTogetherWithQuestions(); // how do i realize this?
}
我基本上知道如何保存相关模型,但不知道如何将它们关联起来并稍后保存整个构造。
答案 0 :(得分:0)
首先创建一个Question
数组。然后创建一个Exam
,并通过Exam
的关系保存所有问题。将所有代码放入交易中。
已更新:已将模型创建移出事务执行。
$questions = [];
while ($linesRemaining) {
$question = new Question();
// ...
$questions[] = $question;
}
$exam = new Exam();
// ...
DB::transaction(function() {
$exam->save();
$exam->questions()->saveMany($questions);
});
重要提示您必须在Exam
附加Question
之前保存Exam
。父Question
必须首先拥有自己的主键(通过保存自己)以允许附加成功。否则,您将在没有父母身份的情况下保存Models.py
Created on 4 Sep 2015
@author:
'''
# -*- coding: utf-8 -*-
from openerp import models, fields, api
# class test(model.Model):
# _name = 'test.test'
# name = fields.Char()
__init__.py
from . import controllers
from . import models
__openerp__.py file
{
'name': "models",
'version': '1.0',
'depends': ['base'],
'author': "Elliot",
'category': 'Category',
'description': """
My first working module.
""",
'installable': True,
'auto_install': False,
'data': [
'templates.xml',
],
'xml': [
'xml.xml'
],
}
controllers.py
from openerp import http
# class test_mod(http.Controller):
# @http.route('/test_mod/model/', auth='public')
# def index(self, **kw):
# return "Hello, world"
# @http.route('/test_mod/model/objects/', auth='public')
# def list(self, **kw):
# return http.request.render('test_mod.listing', {
# 'root': '/Test_mod/Test_mod',
# 'objects': http.request.env['test_mod.model'].search([]),
# })
# @http.route('/test_mod/model/objects/<model("test_mod.model"):obj>/', auth= 'public')
# def object(self, obj, **kw):
# return http.request.render('test_mod.object', {
# 'object': obj
# })
and templates.xml
<openerp>
<data>
<!-- <template id="listing"> -->
<!-- <ul> -->
<!-- <li t-foreach="objects" t-as="object"> -->
<!-- <a t-attf-href="{{ root }}/objects/{{ object.id }}"> -->
<!-- <t t-esc="object.display_name"/> -->
<!-- </a> -->
<!-- </li> -->
<!-- </ul> -->
<!-- </template> -->
<!-- <template id="object"> -->
<!-- <h1><t t-esc="object.display_name"/></h1> -->
<!-- <dl> -->
<!-- <t t-foreach="object._fields" t-as="field"> -->
<!-- <dt><t t-esc="field"/></dt> -->
<!-- <dd><t t-esc="object[field]"/></dd> -->
<!-- </t> -->
<!-- </dl> -->
<!-- </template> -->
</data>
</openerp>
。