python - Django - OneToOneField 未在管理员中填充
问题描述
OneToOneField
一旦用户提交表单,我正在尝试获取当前登录用户的用户名,用于填充管理员。
用户名应该放在 的user
列中admin.py
。
我尝试了各种方法,但仍然没有运气。我是新手,这是我正在构建的第一个 Django 应用程序,所以我不确定我缺少什么。
我被困住了,不知道我在做什么,所以很高兴任何帮助。
有人可以帮忙吗?我错过了什么?
谢谢!
下面的代码:
用户配置文件/模型
from django.db import models
from django.urls import reverse
from django.contrib.auth.models import AbstractUser, UserManager
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)
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)
cc_number = models.CharField(max_length=100)
cc_expiration = models.CharField(max_length=100)
cc_cvv = 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=User)
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 user_profile.models import Listing
# 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)
#admin.site.unregister(Listing)
master_application/settings.py
AUTH_USER_MODEL = 'users.CustomUser'
AUTH_PROFILE_MODULE = 'users.UserProfile'
用户/模型.py
from django.contrib.auth.models import AbstractUser, UserManager
from django.contrib.auth.models import User
from django.db import models
from django.urls import reverse
class CustomUserManager(UserManager):
def get_by_natural_key(self, username):
case_insensitive_username_field = '{}__iexact'.format(self.model.USERNAME_FIELD)
return self.get(**{case_insensitive_username_field: username})
class CustomUser(AbstractUser):
objects = CustomUserManager()`
解决方案
你的信号坏了;kwargs 永远不会有user
密钥,因此永远不会创建配置文件。您真正想要做的是检查信号是否在创建时被调用(而不是在更新时),添加然后创建一个列表实例:
if kwargs['created']:
user_profile = Listing.objects.create(user=kwargs['instance'])
请注意,AUTH_PROFILE_MODULE 设置已多年未使用,您应该将其删除。
推荐阅读
- r - 在使用 lmerTest 创建的线性混合模型上使用 broom::tidy 时出错
- android - Android LiveData 转换
- ubuntu - 如何在 X11 (Ubuntu) 中设置图标名称
- android-studio - 构建第一个默认应用程序时构建错误“任务':app:preDebugAndroidTestBuild'执行失败”
- asp.net - 在 asp.net 和 Oracle SQL 中处理 Null 值
- mysql - 谁又喜欢我了?
- javascript - 匹配两个 ng-repeats 的对象属性
- html - 内联边框半径属性不适用于生成的电子邮件
- asp.net - System.NullReferenceException: '对象引用未设置为对象的实例
- python-3.x - Tensorflow 亚当优化器 ValueError “错误:不支持无值。”