【问题标题】:How to view (the same) data (of User) in UserProfile in Django如何在Django的UserProfile中查看(相同的)数据(用户)
【发布时间】:2015-10-20 17:03:15
【问题描述】:

所以我遇到了这种情况。

-models.py

from django.db import models
from django.utils import timezone
from autoslug import AutoSlugField
from django.contrib.auth.models import User

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    website = models.URLField(blank=True)
    picture = models.ImageField(upload_to='profile_images', blank=True)

    def __unicode__(self):
        return self.user.username

-forms.py

from django import forms
from django.forms import ModelForm
from tentagarden.models import UserProfile
from django.contrib.auth.models import User
from parsley.decorators import parsleyfy

@parsleyfy
class UserForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput())

    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'password')

class UserProfileForm(forms.ModelForm):
    class Meta:
        model = UserProfile
        fields = ('website', 'picture')

-views.py

from django.shortcuts import render_to_response, render, redirect
from django.template import RequestContext
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.contrib.auth import authenticate, login, logout
from django.contrib.auth.decorators import login_required

from tentagarden.forms import UserForm, UserProfileForm

def home(request):
    context = RequestContext(request)

    registered = False

    if request.method == 'POST':
        user_form = UserForm(data=request.POST)
        profile_form = UserProfileForm(data=request.POST)

        if user_form.is_valid() and profile_form.is_valid():
            user = user_form.save()

            user.set_password(user.password)
            user.save()

            profile = profile_form.save(commit=False)
            profile.user = user

            if 'picture' in request.FILES:
                profile.picture = request.FILES['picture']

            profile.save()

            registered = True

        else:
            print user_form.errors, profile_form.errors

    else:
        user_form = UserForm()
        profile_form = UserProfileForm()

    return render_to_response(
            'tentagarden/home.html',
            {'user_form': user_form, 'profile_form': profile_form, 'registered': registered},
            context)

-admin.py

from django.contrib import admin
from .models import File, Post, UserProfile

admin.site.register(File)
admin.site.register(Post)
admin.site.register(UserProfile)

我希望在“用户个人资料”(在管理页面中)中显示用户数据(如名字、姓氏和电子邮件),而不是仅在“用户”中。
我该怎么办?

谢谢!

【问题讨论】:

  • 如果您只是对管理员感兴趣,为什么要发布所有这些代码?为什么你还没有发布实际相关的代码 admin.py?
  • 因为我是菜鸟,所以我现在要发布它,对不起:-\
  • 除了仅在“用户”中之外,在“用户配置文件”(在“管理”页面中)中可视化是什么意思?你想要 3 个单独的列吗

标签: python django authentication django-admin


【解决方案1】:

把它放在你的 admin.py 中

class UserProfileAdmin(admin.ModelAdmin):
    list_display = ('email', 'first_name', 'last_name', 'website')
    search_fields = ('user__username', 'user__first_name', 'user__last_name', 'user__email')
    # list_filter = ('some_field_to_filter')
    readonly_fields = ('email', 'first_name', 'last_name')

    def email(self, obj):
        return obj.user.email
    def first_name(self, obj):
        return obj.user.first_name
    def last_name(self, obj):
        return obj.user.last_name

admin.site.register(UserProfile, UserProfileAdmin)

使用fieldsets 控制编辑视图中显示字段的顺序。

【讨论】:

  • 这几乎是完美的,谢谢!剩下的唯一一件事是,当我单击查看用户的详细信息时,我还想查看电子邮件、名字和姓氏字段。这可能吗?
  • 您的意思是在编辑视图中?您从哪里获得个人资料的所有详细信息?
  • 更新了答案。
  • 是的!极好的!非常感谢:)
猜你喜欢
  • 2020-06-08
  • 1970-01-01
  • 2021-05-21
  • 2012-08-08
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
相关资源
最近更新 更多