Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 登录返回扩展模型,而不是基本模型_Python_Django_Django Models_Django Admin - Fatal编程技术网

Python 登录返回扩展模型,而不是基本模型

Python 登录返回扩展模型,而不是基本模型,python,django,django-models,django-admin,Python,Django,Django Models,Django Admin,免责声明:我已经学习Python和Django一个月了,作为一名初露头角的程序员,我正在构建我的第一个项目 所需功能:新用户打开应用程序并注册用户名和密码。然后,他们被带到一个配置文件页面,在那里他们输入了一系列的内容。他们提交,现在应该链接到用户(创建者)和个人资料(内容)。他们只能查看和编辑他们的页面 当前问题:当我以管理员身份登录时,我可以看到所有配置文件信息。当我以普通用户身份登录时,我只看到该用户在注册时请求的信息(用户名)。我没有看到任何配置文件信息,尽管字段(空)在那里。实际上,登

免责声明:我已经学习Python和Django一个月了,作为一名初露头角的程序员,我正在构建我的第一个项目

所需功能:新用户打开应用程序并注册用户名和密码。然后,他们被带到一个配置文件页面,在那里他们输入了一系列的内容。他们提交,现在应该链接到用户(创建者)和个人资料(内容)。他们只能查看和编辑他们的页面

当前问题:当我以管理员身份登录时,我可以看到所有配置文件信息。当我以普通用户身份登录时,我只看到该用户在注册时请求的信息(用户名)。我没有看到任何配置文件信息,尽管字段(空)在那里。实际上,登录会将我带到用户处,但不会带到配置文件处。我猜我的模型有问题。我是否应该从一个抽象用户模型开始,然后使用一对一的扩展概要文件模型?我想我可能是倒着做的。谢谢

我什么时候看到:

以用户“bbasil”身份登录:

学生姓名:

首选名:
电邮: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文件中。您可以显示您的查看代码吗?您可以包括与注册和注册页面相关的代码吗?