如何在 Django 的 UserProfile 中查看(相同的)数据(用户)
How to view (the same) data (of User) in UserProfile in Django
所以我遇到了这种情况。
-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)
而且我希望在 "User profiles"(在管理页面)中显示用户数据(名字、姓氏和电子邮件),而不是仅在 "Users" 中。
我该怎么办?
谢谢!
把这个放在你的 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控制编辑视图中字段的显示顺序。
所以我遇到了这种情况。
-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)
而且我希望在 "User profiles"(在管理页面)中显示用户数据(名字、姓氏和电子邮件),而不是仅在 "Users" 中。
我该怎么办?
谢谢!
把这个放在你的 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控制编辑视图中字段的显示顺序。