我正在尝试取消引用Flask后端的引用字段,并返回完整对象,并取消引用该字段。
我试图取消引用的字段定义如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/toolbar_actionbar"
layout="@layout/toolbar_default"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/toolbar_actionbar">
<FrameLayout
android:id="@+id/main_fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/toolbar_actionbar" />
<!-- android:layout_marginTop="?android:attr/actionBarSize"-->
<fragment
android:id="@+id/navigation_drawer"
android:name="vodafone.navdrawertest.NavigationDrawerFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
app:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>
我试图取消引用它的方式是这样的:
vouches_received = db.ListField(db.ReferenceField('Vouch'))
然而,当我这样做时:
unverified_vouches = []
for vouch in usr.vouches_received:
unverified_vouches.append(vouch.to_mongo())
usr.vouches_received = unverified_vouches
在对象上,我得到一个ValidationError,如下所示:
usr.to_json()
3个点(...)基本上是解除引用的文档,它主要包含字符串,日期字段和其他一些我不希望取消引用的参考字段。
我知道这是一个有效的错误,因为它期望参考字段的ObjectID,但随后出现了问题,我如何成功取消引用该字段并返回文档。
由于
答案 0 :(得分:1)
ListField
期待ObjectId
的元素,并且因为你已经取消引用它们,它会抛出该错误。我不确定这是最优雅的方式,但您可以将usr.to_json()
转换为dict
,然后将vouches_received
列表替换为引用列表 - 我无法测试它但有类似的事情吗?
user_dict = json.loads(usr.to_json())
unverified_vouches = []
for vouch in usr.vouches_received:
user_dict['vouches_received'].append(vouch.to_mongo())
usr_json = json.dumps(user_dict)
更好的解决方案可能是使用EmbededDocument。