def test_ajax_fk_multi(): app, db, admin = setup() class Model1(db.Model): __tablename__ = 'model1' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(20)) def __str__(self): return self.name table = db.Table( 'm2m', db.Model.metadata, db.Column('model1_id', db.Integer, db.ForeignKey('model1.id')), db.Column('model2_id', db.Integer, db.ForeignKey('model2.id'))) class Model2(db.Model): __tablename__ = 'model2' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(20)) model1_id = db.Column(db.Integer(), db.ForeignKey(Model1.id)) model1 = db.relationship(Model1, backref='models2', secondary=table) db.create_all() view = CustomModelView(Model2, db.session, url='view', form_ajax_refs={'model1': { 'fields': ['name'] }}) admin.add_view(view) ok_(u'model1' in view._form_ajax_refs) model = Model1(name=u'first') db.session.add_all([model, Model1(name=u'foo')]) db.session.commit() # Check form generation form = view.create_form() eq_(form.model1.__class__.__name__, u'AjaxSelectMultipleField') with app.test_request_context('/admin/view/'): ok_(u'data-json="[]"' in form.model1()) form.model1.data = [model] ok_(u'data-json="[[1, "first"]]"' in form.model1()) # Check submitting client = app.test_client() client.post('/admin/view/new/', data={u'model1': as_unicode(model.id)}) mdl = db.session.query(Model2).first() ok_(mdl is not None) ok_(mdl.model1 is not None) eq_(len(mdl.model1), 1)
def test_ajax_fk(): app, db, admin = setup() Model1, Model2 = create_models(db) view = CustomModelView( Model2, db.session, url='view', form_ajax_refs={'model1': { 'fields': ('test1', 'test2') }}) admin.add_view(view) ok_(u'model1' in view._form_ajax_refs) model = Model1(u'first') model2 = Model1(u'foo', u'bar') db.session.add_all([model, model2]) db.session.commit() # Check loader loader = view._form_ajax_refs[u'model1'] mdl = loader.get_one(model.id) eq_(mdl.test1, model.test1) items = loader.get_list(u'fir') eq_(len(items), 1) eq_(items[0].id, model.id) items = loader.get_list(u'bar') eq_(len(items), 1) eq_(items[0].test1, u'foo') # Check form generation form = view.create_form() eq_(form.model1.__class__.__name__, u'AjaxSelectField') with app.test_request_context('/admin/view/'): ok_(u'value=""' not in form.model1()) form.model1.data = model ok_(u'data-json="[%s, "first"]"' % model.id in form.model1()) ok_(u'value="1"' in form.model1()) # Check querying client = app.test_client() req = client.get(u'/admin/view/ajax/lookup/?name=model1&query=foo') eq_(req.data.decode('utf-8'), u'[[%s, "foo"]]' % model2.id) # Check submitting req = client.post('/admin/view/new/', data={u'model1': as_unicode(model.id)}) mdl = db.session.query(Model2).first() ok_(mdl is not None) ok_(mdl.model1 is not None) eq_(mdl.model1.id, model.id) eq_(mdl.model1.test1, u'first')
def test_ajax_fk(): app, db, admin = setup() Model1, Model2 = create_models(db) view = CustomModelView( Model2, url="view", form_ajax_refs={"model1": { "fields": ("test1", "test2") }}) admin.add_view(view) ok_(u"model1" in view._form_ajax_refs) model = Model1(test1=u"first") model.save() model2 = Model1(test1=u"foo", test2=u"bar").save() # Check loader loader = view._form_ajax_refs[u"model1"] mdl = loader.get_one(model.id) eq_(mdl.test1, model.test1) items = loader.get_list(u"fir") eq_(len(items), 1) eq_(items[0].id, model.id) items = loader.get_list(u"bar") eq_(len(items), 1) eq_(items[0].test1, u"foo") # Check form generation form = view.create_form() eq_(form.model1.__class__.__name__, u"AjaxSelectField") with app.test_request_context("/admin/view/"): ok_(u'value=""' not in form.model1()) form.model1.data = model needle = u'data-json="["%s", "first"]"' % as_unicode( model.id) ok_(needle in form.model1()) ok_(u'value="%s"' % as_unicode(model.id) in form.model1()) # Check querying client = app.test_client() req = client.get(u"/admin/view/ajax/lookup/?name=model1&query=foo") eq_(req.data, u'[["%s", "foo"]]' % model2.id) # Check submitting client.post("/admin/view/new/", data={u"model1": as_unicode(model.id)}) mdl = Model2.objects.first() ok_(mdl is not None) ok_(mdl.model1 is not None) eq_(mdl.model1.id, model.id) eq_(mdl.model1.test1, u"first")
def test_ajax_fk(): app, db, admin = setup() Model1, Model2 = create_models(db) view = CustomModelView(Model2, url="view", form_ajax_refs={"model1": {"fields": ("test1", "test2")}}) admin.add_view(view) ok_(u"model1" in view._form_ajax_refs) model = Model1(test1=u"first") model.save() model2 = Model1(test1=u"foo", test2=u"bar").save() # Check loader loader = view._form_ajax_refs[u"model1"] mdl = loader.get_one(model.id) eq_(mdl.test1, model.test1) items = loader.get_list(u"fir") eq_(len(items), 1) eq_(items[0].id, model.id) items = loader.get_list(u"bar") eq_(len(items), 1) eq_(items[0].test1, u"foo") # Check form generation form = view.create_form() eq_(form.model1.__class__.__name__, u"AjaxSelectField") with app.test_request_context("/admin/view/"): ok_(u'value=""' not in form.model1()) form.model1.data = model needle = u'data-json="["%s", "first"]"' % as_unicode(model.id) ok_(needle in form.model1()) ok_(u'value="%s"' % as_unicode(model.id) in form.model1()) # Check querying client = app.test_client() req = client.get(u"/admin/view/ajax/lookup/?name=model1&query=foo") eq_(req.data, u'[["%s", "foo"]]' % model2.id) # Check submitting client.post("/admin/view/new/", data={u"model1": as_unicode(model.id)}) mdl = Model2.objects.first() ok_(mdl is not None) ok_(mdl.model1 is not None) eq_(mdl.model1.id, model.id) eq_(mdl.model1.test1, u"first")
def test_ajax_fk(): app, db, admin = setup() Model1, Model2 = create_models(db) view = CustomModelView( Model2, url='view', form_ajax_refs={ 'model1': { 'fields': ('test1', 'test2') } } ) admin.add_view(view) ok_(u'model1' in view._form_ajax_refs) model = Model1(test1=u'first') model.save() model2 = Model1(test1=u'foo', test2=u'bar').save() # Check loader loader = view._form_ajax_refs[u'model1'] mdl = loader.get_one(model.id) eq_(mdl.test1, model.test1) items = loader.get_list(u'fir') eq_(len(items), 1) eq_(items[0].id, model.id) items = loader.get_list(u'bar') eq_(len(items), 1) eq_(items[0].test1, u'foo') # Check form generation form = view.create_form() eq_(form.model1.__class__.__name__, u'AjaxSelectField') with app.test_request_context('/admin/view/'): ok_(u'value=""' not in form.model1()) form.model1.data = model needle = u'data-json="["%s", "first"]"' % as_unicode(model.id) ok_(needle in form.model1()) ok_(u'value="%s"' % as_unicode(model.id) in form.model1()) # Check querying client = app.test_client() req = client.get(u'/admin/view/ajax/lookup/?name=model1&query=foo') eq_(req.data, u'[["%s", "foo"]]' % model2.id) # Check submitting client.post('/admin/view/new/', data={u'model1': as_unicode(model.id)}) mdl = Model2.objects.first() ok_(mdl is not None) ok_(mdl.model1 is not None) eq_(mdl.model1.id, model.id) eq_(mdl.model1.test1, u'first')
def test_ajax_fk_multi(): app, db, admin = setup() class Model1(db.Model): __tablename__ = 'model1' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(20)) def __str__(self): return self.name table = db.Table('m2m', db.Model.metadata, db.Column('model1_id', db.Integer, db.ForeignKey('model1.id')), db.Column('model2_id', db.Integer, db.ForeignKey('model2.id')) ) class Model2(db.Model): __tablename__ = 'model2' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(20)) model1_id = db.Column(db.Integer(), db.ForeignKey(Model1.id)) model1 = db.relationship(Model1, backref='models2', secondary=table) db.create_all() view = CustomModelView( Model2, db.session, url='view', form_ajax_refs={ 'model1': { 'fields': ['name'] } } ) admin.add_view(view) ok_(u'model1' in view._form_ajax_refs) model = Model1(name=u'first') db.session.add_all([model, Model1(name=u'foo')]) db.session.commit() # Check form generation form = view.create_form() eq_(form.model1.__class__.__name__, u'AjaxSelectMultipleField') with app.test_request_context('/admin/view/'): ok_(u'data-json="[]"' in form.model1()) form.model1.data = [model] ok_(u'data-json="[[1, "first"]]"' in form.model1()) # Check submitting client = app.test_client() client.post('/admin/view/new/', data={u'model1': as_unicode(model.id)}) mdl = db.session.query(Model2).first() ok_(mdl is not None) ok_(mdl.model1 is not None) eq_(len(mdl.model1), 1)
def test_ajax_fk(): app, db, admin = setup() class BaseModel(peewee.Model): class Meta: database = db class Model1(BaseModel): test1 = peewee.CharField(max_length=20) test2 = peewee.CharField(max_length=20) def __str__(self): return self.test1 class Model2(BaseModel): model1 = peewee.ForeignKeyField(Model1) Model1.create_table() Model2.create_table() view = CustomModelView( Model2, url='view', form_ajax_refs={ 'model1': { 'fields': ('test1', 'test2') } } ) admin.add_view(view) ok_(u'model1' in view._form_ajax_refs) model = Model1(test1=u'first', test2=u'') model.save() model2 = Model1(test1=u'foo', test2=u'bar') model2.save() # Check loader loader = view._form_ajax_refs[u'model1'] mdl = loader.get_one(model.id) eq_(mdl.test1, model.test1) items = loader.get_list(u'fir') eq_(len(items), 1) eq_(items[0].id, model.id) items = loader.get_list(u'bar') eq_(len(items), 1) eq_(items[0].test1, u'foo') # Check form generation form = view.create_form() eq_(form.model1.__class__.__name__, u'AjaxSelectField') with app.test_request_context('/admin/view/'): ok_(u'value=""' not in form.model1()) form.model1.data = model needle = u'data-json="[%s, "first"]"' % as_unicode(model.id) ok_(needle in form.model1()) ok_(u'value="%s"' % as_unicode(model.id) in form.model1()) # Check querying client = app.test_client() req = client.get(u'/admin/view/ajax/lookup/?name=model1&query=foo') eq_(req.data, u'[[%s, "foo"]]' % model2.id) # Check submitting client.post('/admin/view/new/', data={u'model1': as_unicode(model.id)}) mdl = Model2.select().first() ok_(mdl is not None) ok_(mdl.model1 is not None) eq_(mdl.model1.id, model.id) eq_(mdl.model1.test1, u'first')
def test_ajax_fk(): app, db, admin = setup() class BaseModel(peewee.Model): class Meta: database = db class Model1(BaseModel): test1 = peewee.CharField(max_length=20) test2 = peewee.CharField(max_length=20) def __str__(self): return self.test1 class Model2(BaseModel): model1 = peewee.ForeignKeyField(Model1) Model1.create_table() Model2.create_table() view = CustomModelView( Model2, url="view", form_ajax_refs={"model1": { "fields": ("test1", "test2") }}) admin.add_view(view) ok_(u"model1" in view._form_ajax_refs) model = Model1(test1=u"first", test2=u"") model.save() model2 = Model1(test1=u"foo", test2=u"bar") model2.save() # Check loader loader = view._form_ajax_refs[u"model1"] mdl = loader.get_one(model.id) eq_(mdl.test1, model.test1) items = loader.get_list(u"fir") eq_(len(items), 1) eq_(items[0].id, model.id) items = loader.get_list(u"bar") eq_(len(items), 1) eq_(items[0].test1, u"foo") # Check form generation form = view.create_form() eq_(form.model1.__class__.__name__, u"AjaxSelectField") with app.test_request_context("/admin/view/"): ok_(u'value=""' not in form.model1()) form.model1.data = model needle = u'data-json="[%s, "first"]"' % as_unicode(model.id) ok_(needle in form.model1()) ok_(u'value="%s"' % as_unicode(model.id) in form.model1()) # Check querying client = app.test_client() req = client.get(u"/admin/view/ajax/lookup/?name=model1&query=foo") eq_(req.data, u'[[%s, "foo"]]' % model2.id) # Check submitting client.post("/admin/view/new/", data={u"model1": as_unicode(model.id)}) mdl = Model2.select().first() ok_(mdl is not None) ok_(mdl.model1 is not None) eq_(mdl.model1.id, model.id) eq_(mdl.model1.test1, u"first")
def test_ajax_fk(): app, db, admin = setup() Model1, Model2 = create_models(db) view = CustomModelView( Model2, url='view', form_ajax_refs={ 'model1': { 'fields': ('test1', 'test2') } } ) admin.add_view(view) assert u'model1' in view._form_ajax_refs model = Model1(test1=u'first') model.save() model2 = Model1(test1=u'foo', test2=u'bar').save() # Check loader loader = view._form_ajax_refs[u'model1'] mdl = loader.get_one(model.id) assert mdl.test1 == model.test1 items = loader.get_list(u'fir') assert len(items) == 1 assert items[0].id == model.id items = loader.get_list(u'bar') assert len(items) == 1 assert items[0].test1 == u'foo' # Check form generation form = view.create_form() assert form.model1.__class__.__name__ == u'AjaxSelectField' with app.test_request_context('/admin/view/'): assert u'value=""' not in form.model1() form.model1.data = model assert (u'data-json="["%s", "first"]"' % as_unicode(model.id) in form.model1() or u'data-json="["%s", "first"]"' % as_unicode(model.id) in form.model1()) assert u'value="%s"' % as_unicode(model.id) in form.model1() # Check querying client = app.test_client() req = client.get(u'/admin/view/ajax/lookup/?name=model1&query=foo') assert req.data.decode('utf-8') == u'[["%s", "foo"]]' % model2.id # Check submitting client.post('/admin/view/new/', data={u'model1': as_unicode(model.id)}) mdl = Model2.objects.first() assert mdl is not None assert mdl.model1 is not None assert mdl.model1.id == model.id assert mdl.model1.test1 == u'first'
def test_ajax_fk(): app, db, admin = setup() class BaseModel(peewee.Model): class Meta: database = db class Model1(BaseModel): test1 = peewee.CharField(max_length=20) test2 = peewee.CharField(max_length=20) def __str__(self): return self.test1 class Model2(BaseModel): model1 = peewee.ForeignKeyField(Model1) Model1.create_table() Model2.create_table() view = CustomModelView( Model2, url='view', form_ajax_refs={'model1': { 'fields': ('test1', 'test2') }}) admin.add_view(view) ok_(u'model1' in view._form_ajax_refs) model = Model1(test1=u'first', test2=u'') model.save() model2 = Model1(test1=u'foo', test2=u'bar') model2.save() # Check loader loader = view._form_ajax_refs[u'model1'] mdl = loader.get_one(model.id) eq_(mdl.test1, model.test1) items = loader.get_list(u'fir') eq_(len(items), 1) eq_(items[0].id, model.id) items = loader.get_list(u'bar') eq_(len(items), 1) eq_(items[0].test1, u'foo') # Check form generation form = view.create_form() eq_(form.model1.__class__.__name__, u'AjaxSelectField') with app.test_request_context('/admin/view/'): ok_(u'value=""' not in form.model1()) form.model1.data = model ok_(u'data-json="[%s, "first"]"' % as_unicode(model.id) in form.model1() or u'data-json="[%s, "first"]"' % as_unicode(model.id)) ok_(u'value="%s"' % as_unicode(model.id) in form.model1()) # Check querying client = app.test_client() req = client.get(u'/admin/view/ajax/lookup/?name=model1&query=foo') eq_(req.data, u'[[%s, "foo"]]' % model2.id) # Check submitting client.post('/admin/view/new/', data={u'model1': as_unicode(model.id)}) mdl = Model2.select().first() ok_(mdl is not None) ok_(mdl.model1 is not None) eq_(mdl.model1.id, model.id) eq_(mdl.model1.test1, u'first')