python - Django - 如何让当前登录的用户填充到 django admin 中?

标签 python django

我创建了一个表单,当当前登录的用户进行提交时,我可以在管理员中填充我想要填充的所有内容,但当前登录用户的用户名除外。

如果有帮助的话,我正在使用的自定义用户模型位于 from users.models import CustomUser 中。

如何获取当前登录用户的用户名以填充到 admin.pyuser 列中?

我很高兴得到任何帮助,干杯

管理员屏幕截图:

enter image description here

用户个人资料/模型

from django.db import models
from django.urls import reverse
from django.contrib.auth.models import AbstractUser, UserManager
from django.contrib.auth.models import BaseUserManager
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.conf import settings
from users.forms import CustomUserCreationForm, CustomUserChangeForm
from users.models import CustomUser


class Listing (models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
    created =  models.DateTimeField(auto_now_add=True, null=True)
    updated = models.DateTimeField(auto_now=True)
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=100)
    zip_code = models.CharField(max_length=100)
    mobile_number = models.CharField(max_length=100)


def create_profile(sender, **kwargs):
    if kwargs['created']:
        user_profile = Listing.objects.create(user=kwargs['instance'])

post_save.connect(create_profile, sender=CustomUser)

user_profile/views.py

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, redirect
from django.conf import settings
from django.views.generic.edit import FormView
from django.views.generic.edit import UpdateView
from django.views.generic import TemplateView
from .forms import HomeForm
from users.forms import CustomUserCreationForm, CustomUserChangeForm
from .models import Listing
from users.models import CustomUser
from django.urls import reverse_lazy
from django.utils import six
from django.utils.translation import ugettext as _
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from avatar.forms import PrimaryAvatarForm, DeleteAvatarForm, UploadAvatarForm
from avatar.models import Avatar
from avatar.signals import avatar_updated, avatar_deleted
from avatar.utils import (get_primary_avatar, get_default_avatar_url,
                          invalidate_cache)


def change_view(request):
    form = HomeForm(request.POST or None)
    user_profile = Listing.objects.all
    user = request.user

    if form.is_valid():
        form.save()
        form = HomeForm()

    context = {
        'form': form, 'user_profile': user_profile 
    }

    return render(request, "myaccount.html", context)

user_profile/admin.py

from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin


from user_profile.forms import HomeForm
from users.forms import CustomUserCreationForm, CustomUserChangeForm

from user_profile.models import Listing
from users.models import CustomUser


# Register models here.

class UserProfileAdmin(admin.ModelAdmin):
    list_display = ['name', 'address', 'zip_code', 'mobile_number', 'created', 'updated', 'user']
    list_filter = ['name', 'zip_code', 'created', 'updated', 'user']

admin.site.register(Listing, UserProfileAdmin)

HTML

<form role="form" action="" method="post">
{% csrf_token %}
{{ form.non_field_errors }}
{{ form.errors }}   
{{ form.name }}
{{ form.address }}
{{ form.zip_code }}
{{ form.mobile_number }}
<button class="btn btn-primary btn-success btn-round btn-extend" type="submit" value="Submit"><i class="zmdi zmdi-favorite-outline6"></i>Submit</button>
</form>   

设置

AUTH_USER_MODEL = 'users.CustomUser'

最佳答案

更改了 view.py 中的以下代码来解决该问题:

user_profile/views.py

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, redirect
from django.conf import settings
from django.views.generic.edit import FormView
from django.views.generic.edit import UpdateView
from django.views.generic import TemplateView
from .forms import HomeForm
from users.forms import CustomUserCreationForm, CustomUserChangeForm
from .models import Listing
from users.models import CustomUser
from django.urls import reverse_lazy
from django.utils import six
from django.utils.translation import ugettext as _
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from avatar.forms import PrimaryAvatarForm, DeleteAvatarForm, UploadAvatarForm
from avatar.models import Avatar
from avatar.signals import avatar_updated, avatar_deleted
from avatar.utils import (get_primary_avatar, get_default_avatar_url,
                          invalidate_cache)


def change_view(request):
    form = HomeForm(request.POST or None)
    user_profile = Listing.objects.all
    user = request.user

    if form.is_valid():
        listing_instance = form.save()  # "this will return the 'Listing' instance"
        listing_instance.user = user
        listing_instance.save()
        form = HomeForm()

    context = {
        'form': form, 'user_profile': user_profile
    }

    return render(request, "myaccount.html", context)

关于python - Django - 如何让当前登录的用户填充到 django admin 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54029626/

相关文章:

python - 更改使用 seaborn.factorplot 创建的条形图中条形的宽度

无论输入如何,Python 函数都会运行到第一个 if 语句

python - GAE 和 Django : What are the benefits?

django - 在生产环境中通过 Django 发送 SMTP 电子邮件

python - Django 404 POST 请求

python - 从 statsmodels OLS 结果中打印 'std err' 值

python - 使用 python "ConfigParser"编辑 ini 文件会将所有 ini 条目替换为较低的键

python - 猜数字游戏-全局变量

python - 如何在 Graphql 突变中返回 PDF 文件?

django测试重定向失败