0

私はdjangoのユーザーモデルの「拡張」モデルを扱っています。これが私のモデルの定義です。

class UserProfile(models.Model):

    user = models.ForeignKey(User, unique=True, editable=False)
    real_name = models.CharField('Real Name', max_length=20)
    telephone = models.CharField('Tel', max_length=30)
    company = models.CharField('Company', max_length=30)
    department = models.CharField('Department', max_length=30)

ご覧のとおり、私のUserProfileモデルは、「ForeignKey」を持つことでdjangoの組み込みユーザーモデルと「1対1」の関係にあります。別のsulotionが「OneToOneField」を使用していることを知っています。ここでは1つが優先されますか、それともより適切ですか?

今、私の状況は、ビュー関数でUserProfileモデルとdjangoの組み込みUserモデルの組み合わせ情報を取得しています。また、ここでページネーションを行う必要があります。

def get_user_list(request):
    rows_per_page=int(request.POST["rows"])
    page_number=int(request.POST["page"])
    user_list = User.objects.all()# You can see that I only got the built-in User ,
    total=user_list.count()       #but how to get my UserProfile efficiently ?

    paginator = Paginator(user_list, rows_per_page)

    try:
        rows = paginator.page(page_number)
    except PageNotAnInteger:

        rows = paginator.page(1)
    except EmptyPage:

        rows = paginator.page(paginator.num_pages)


    result={
        "total":total,
        "rows":rows.object_list,
        }

    jsonSerializer = JSONSerializer()
    return HttpResponse(jsonSerializer.serialize(result),mimetype='application/json')

今、私の質問は、UserProileモデルと組み込みのUserモデルの組み合わせを取得して、クエリセット、リスト、辞書などを作成する方法です。また、既存のページネーションコードに適合する組み合わせオブジェクトが必要です。:)どうもありがとうございます!

4

2 に答える 2

1

djangoドキュメントの関係にまたがるルックアップを入門書として読んでから、関係を逆方向にたどって、オブジェクトを正しくクエリする方法を理解する必要があります。

モデルにForeignKeyがある場合、外部キーモデルのインスタンスは、最初のモデルのすべてのインスタンスを返すManagerにアクセスできます。デフォルトでは、このマネージャーの名前はFOO_setです。ここで、FOOは小文字のソースモデル名です。このマネージャーはQuerySetsを返します。これは、上記の「オブジェクトの取得」セクションで説明されているように、フィルター処理および操作できます。

したがって、すべてのオブジェクトは、次のように呼ばれるマネージャーで、userそのすべてのオブジェクトと逆の関係にあります。profileuserprofile_set

u = User.objects.get(pk=1)
user_profile = u.userprofile_set.all()
于 2012-06-26T06:29:55.180 に答える
1

推奨される解決策はOneToOneField、AUTH_PROFILE_MODULEを使用することuser.get_profile()です。ここに記載されているように: https://docs.djangoproject.com/en/1.4/topics/auth/#storing-additional-information-about-user

于 2012-06-30T14:43:26.250 に答える