Queryset,只获得一个反向关系

时间:2015-05-29 17:45:43

标签: django django-queryset

class Foo(models.Model):
    name = CharField
    createdat = DateTimeField

class Bar(models.Model):
    rel = ForeignKey(Foo, related_name='bars')
    createdat = DateTimeField

Foo.prefetch_related('bars').all()给了我所有的酒吧。有什么方法我只能使用一个查询获得每个Bar的最新Foo吗?

2 个答案:

答案 0 :(得分:0)

试试这个:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.tabhost1.MainActivity">

<TabHost
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="100dp"></TabWidget>

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent">

            <LinearLayout
                android:id="@+id/tab1"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical">

                <TextView
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:text="pestana 1"></TextView>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/tab2"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical">

                <TextView
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:text="Pesana 2"></TextView>
            </LinearLayout>

            <LinearLayout
                android:id="@+id/tab3"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:orientation="vertical">

                <TextView
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:text="Pesana 3"></TextView>
            </LinearLayout>
        </FrameLayout>
    </LinearLayout>
</TabHost>

答案 1 :(得分:0)

您想使用Prefetch对象,docs

Prefetch()可让您过滤查询,如下例所示:

queryset = Bar.objects.latest('createdat')
latest_bars = Foo.objects.prefetch_related(
    Prefetch(
        'bars', 
        queryset, 
        to_attr="latest_bar"
    )
)
the_latest_bar_for_first_foo = latest_bars[0].latest_bar