Python 登录返回扩展模型,而不是基本模型
免责声明:我已经学习Python和Django一个月了,作为一名初露头角的程序员,我正在构建我的第一个项目 所需功能:新用户打开应用程序并注册用户名和密码。然后,他们被带到一个配置文件页面,在那里他们输入了一系列的内容。他们提交,现在应该链接到用户(创建者)和个人资料(内容)。他们只能查看和编辑他们的页面 当前问题:当我以管理员身份登录时,我可以看到所有配置文件信息。当我以普通用户身份登录时,我只看到该用户在注册时请求的信息(用户名)。我没有看到任何配置文件信息,尽管字段(空)在那里。实际上,登录会将我带到用户处,但不会带到配置文件处。我猜我的模型有问题。我是否应该从一个抽象用户模型开始,然后使用一对一的扩展概要文件模型?我想我可能是倒着做的。谢谢 我什么时候看到: 以用户“bbasil”身份登录: 学生姓名: 首选名:Python 登录返回扩展模型,而不是基本模型,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,免责声明:我已经学习Python和Django一个月了,作为一名初露头角的程序员,我正在构建我的第一个项目 所需功能:新用户打开应用程序并注册用户名和密码。然后,他们被带到一个配置文件页面,在那里他们输入了一系列的内容。他们提交,现在应该链接到用户(创建者)和个人资料(内容)。他们只能查看和编辑他们的页面 当前问题:当我以管理员身份登录时,我可以看到所有配置文件信息。当我以普通用户身份登录时,我只看到该用户在注册时请求的信息(用户名)。我没有看到任何配置文件信息,尽管字段(空)在那里。实际上,登
电邮:bbasil@gobble.edu
学校名称:
短简历:
兴趣:,
以“管理员”身份登录: 学生姓名:布兰奇·卡米尔·巴兹尔 首选名字:贝蒂
电邮:bbasil@gobble.edu
学校名称:戈布尔大学
简介:我喜欢做冰雕、烤法式面包和跳萨尔萨舞。
兴趣:雕塑、烤面包、萨尔萨舞
MODELS.PY
from django.core.validators import RegexValidator
from django.template.defaultfilters import slugify
from django.template import Template, Context
from utils import get_domain
from django.contrib.auth.models import User
from django.db import models
class Timestamp(models.Model):
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
abstract = True
alphanumeric = RegexValidator(r'^[0-9a-zA-Z]*$', 'Alphanumeric characters only.')
class Profile(Timestamp):
first_name = models.CharField(max_length=100, blank=True, null=True, validators=[alphanumeric])
middle_name = models.CharField(max_length=100, blank=True, null=True, validators=[alphanumeric])
last_name = models.CharField(max_length=100, blank=True, null=True, validators=[alphanumeric])
preferred_name = models.CharField(max_length=100, blank=True, null=True, validators=[alphanumeric])
name = models.CharField(max_length=100)
email = models.EmailField(max_length=254)
school_name = models.CharField(max_length=100)
short_bio = models.TextField()
interest1 = models.CharField(max_length=100)
interest2 = models.CharField(max_length=100)
interest3 = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
domain = models.CharField(max_length=100)
webcode = models.CharField(max_length=100)
user = models.OneToOneField(User, blank=True, null=True)
def middle_initial(self): # doesn't seem to work for domain logic
t = Template('{{ first_name|slice:"1" }}')
c = Context ({'first_name': first_name })
return t.render(c)
@property # what does this do?
def name(self):
return "%s %s" % (self.first_name, self.last_name)
def save(self, *args, **kwargs):
if not self.webcode: # What are these ifs saying?
self.webcode = User.objects.make_random_password(length=10)
if not self.slug:
self.slug = slugify(self.name)
if not self.domain:
self.domain = get_domain(first_name=self.first_name, middle_name=self.middle_name, last_name=self.last_name, preferred_name=self.preferred_name)
return super(Profile, self).save(*args, **kwargs)
def __str__(self):
return self.name
def get_image_path(instance, filename):
return '/'.join(['profile_images', instance.profile.slug, filename])
class User(models.Model):
profile = models.OneToOneField(Profile, blank=True, null=True, related_name="creators")
class Upload(Timestamp):
profile = models.ForeignKey(Profile, related_name="uploads")
image = models.ImageField(upload_to=get_image_path)
VIEWS.PY
from django.conf import settings
from django.template.defaultfilters import slugify
from django.shortcuts import render, redirect
from student_profile.forms import ProfileForm, UploadForm
from student_profile.models import Profile, Upload
def index(request):
if not request.user.is_authenticated():
return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
else:
if request.user.is_superuser:
profiles = Profile.objects.all().order_by('last_name')
return render(request, 'index.html', {
'profiles': profiles,
})
else:
profile = request.user
return render(request, 'profiles/profile_detail.html', {
'profile': profile,
})
def profile_detail(request, slug):
profile = Profile.objects.get(slug=slug)
uploads = profile.uploads.all()
return render(request, 'profiles/profile_detail.html', {
'profile': profile,
'uploads': uploads,
})
def edit_profile(request, slug):
profile = Profile.objects.get(slug=slug)
form_class = ProfileForm
if request.method == 'POST':
form = form_class(data=request.POST, instance=profile)
if form.is_valid():
form.save()
return redirect('profile_detail', slug=profile.slug)
else:
form = form_class(instance=profile)
return render(request, 'profiles/edit_profile.html', {
'profile': profile,
'form': form,
})
def create_profile(request):
form_class = ProfileForm
if request.method == 'POST':
form = form_class(request.POST)
if form.is_valid():
profile = form.save(commit=False)
profile.user = request.user
profile.slug = slugify(profile.name)
profile.save()
return redirect('profile_detail', slug=profile.slug)
else:
form = form_class()
return render(request, 'profiles/create_profile.html', {
'form': form,
})
def edit_profile_uploads(request, slug):
profile = Profile.objects.get(slug=slug)
form_class = UploadForm
if request.method == 'POST':
form = forn_class(data=request.POST, files=request.FILES, instance=profile)
if form.is_valid():
Upload.objects.create(
image=form.cleand_data['image'],
profile=profile,
)
return redirect('edit_profile_uploads', slug=profile.slug)
else:
form = form_class(instance=profile)
uploads = profile.uploads.all()
return render(request, 'profiles/edit_profile_uploads.html', {
'profile': profile,
'form': form,
'uploads': uploads,
})
注册和注册页面两者都是来自Django的cookie cutter: 登记表
{% extends 'layouts/base.html' %}
{% block title %}Registration Form - {{ block.super }}{% endblock %}
{% block content %}
<h1>Register an Account</h1>
<form role="form" action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
{% endblock %}
{%extends'布局/base.html%}
{%block title%}注册表-{{block.super}{%endblock%}
{%block content%}
开户
{%csrf_令牌%}
{{form.as_p}}
{%endblock%}
创建个人资料
{% extends 'layouts/base.html' %}
{% block title %}Create a Profile - {{ block.super }}{% endblock %}
{% block content %}
<h1>Create Your Profile</h1>
<form role="form" action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
{% endblock %}
{%extends'布局/base.html%}
{%block title%}创建配置文件-{block.super}{%endblock%}
{%block content%}
创建您的个人资料
{%csrf_令牌%}
{{form.as_p}}
{%endblock%}
原来我不应该用同一个浏览器登录到管理员和前端。我通过使用匿名模式登录管理员来修复此问题,以便管理员登录不会覆盖当前用户的会话
当我发现这一点时,我觉得有点傻,但可能会帮助另一个刚接触Django的人 原来我不应该用同一个浏览器登录到管理员和前端。我通过使用匿名模式登录管理员来修复此问题,以便管理员登录不会覆盖当前用户的会话
当我发现这一点时,我觉得有点傻,但可能会帮助另一个刚接触Django的人 Django的用户类有一些您在概要文件中使用的字段。。。尽量利用这一点。问题可能在views.py文件中。您可以显示您的查看代码吗?您可以包括与注册和注册页面相关的代码吗?Django的用户类有一些您在配置文件中使用的字段。。。尽量利用这一点。问题可能在views.py文件中。您可以显示您的查看代码吗?您可以包括与注册和注册页面相关的代码吗?