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 的内置用户模型具有“一对一”关系,我知道另一个 solotion 正在使用“OneToOneField”,有人可以告诉我哪个一个是首选还是更适合这里?

现在,我的情况是,我在视图函数中获取了我的 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。默认情况下,这个 Manager 被命名为 FOO_set,其中 FOO 是源模型名称,小写。此管理器返回查询集,可以按照上面“检索对象”部分中的说明进行过滤和操作。

因此,每个user对象都与其所有对象具有反向关系profile,在一个名为的管理器中userprofile_set

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

推荐的解决方案是使用OneToOneFieldAUTH_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 回答