如果在使用mongo,你可能见的最多的除了一般属性的定义以外,ReferenceField这个可以传递对象的属性应该也是很常见的,例如apple=mongo.ReferenceField(Color),这里Color是另一个表,里面存放的是颜色,颜色多了,一个苹果但只对应一个颜色,如此定义即可在后面写入数据时使用。
这两天的模块完成中,有一个表的属性里面有了GenericReferenceField(),是这样定义的choice_object = mongo.GenericReferenceField(),括号里面没有参数,我就上网查啊查的,可是这个属性好像用的很少,网上很难找到关于其怎么用的例子,在mongo文档里面,是这样说的:
“如果你的document里面包含ReferenceField或者GenericReferenceField,默认情况下使用save()方法时会自动应用这些引用的Document的变化,如果你不需要这个特性,可以把cascade设置为False”
如果说是和ReferenceField一样是不可能的,因为我目前所用到的ReferenceField除了上面说的那种以外,还有一种:
parent = mongo.ReferenceField('self', reverse_delete_rule=mongo.CASCADE),就是在父子数据那里使用了。
如今这个没有参数的GenericReferenceField真是令人搞不清楚了一阵时间,终于问师哥了,师哥给说,那个就是你直接choice_object.对象1,choice_object.对象2就创建一个关于它的实例了。在师哥简单说明它的用法之后,结合我自己目前需要解决的,我觉得貌似明白了什么。对象1,对象2,用这个表之前就得有另一个model的对象。终于,关于此问题的模块也解决了。
代码的话就把主要的放来看看,就明白怎么回事了。
class AddConsultChoiceForm(Form):
choice=SelectField(u'推荐文章题目')
order=IntegerField(u'顺序号',validators=[DataRequired()])
submit=SubmitField(u'保存')
def __init__(self, *args, **kwargs):
super(AddConsultChoiceForm, self).__init__(*args, **kwargs)
self.choice.choices = [(i.title, i.title) for i in
ConsultDoc.objects.all()]
填表表单里面获取文章Doc里面的所有标题
@bp.route('/choice/add',methods=['GET','POST'])
@permission_required
def consult_choice_add():
form=AddConsultChoiceForm()
if form.validate_on_submit():
title=form.choice.data
choice=ConsuletChoiceDoc(choice_object=ConsultDoc.objects(title=title).first(),order=form.order.data)
choice.save()
flash(u'添加成功',current_config.FLASH_WARNING)
return redirect(url_for('consult.consult_choice_list'))
return tmpl(form=form)
在添加的choice_object就等于此标题对应的实例对象。
这样就可以完成GenericReferenceField的基本实现。就目前我还不知道GenericReferenceField有其他用法没。
再一个就是,今天终于在前台把轮播图解决了。从结果的解决来看之前我为什么一直没解决,原因有:1.没掌握flask框架的模版之间继承的关系;2.css,js正确的引用方法。
就说解决的问题:css,js文件导入的<link>或者<script>都一定要写在大主模版版的<head>里面,不要放在block内容的那个模版
<script type="text/javascript" src="{{ static('consult/turn/func.js') }}"></script>
<link href={{ static('consult/turn/turn.css') }} rel="stylesheet" type="text/css"/>
就这两个是我找到的轮播图的css和js,这些文件的位置放不正确,一切特效都不会duangduang的出现。