使用 Admin.User 模型从内联获取数据
Get Data from Inline with Admin.User Model
我正在尝试将 'augmentation' table 与 Admin.User 模型一起使用,以存储与 user/login 相关的其他数据。
这是我的admin.py
class UserProfileInline(admin.StackedInline):
model = AppUserProfile
can_delete = False
verbose_name_plural = 'profile'
# Define a new User admin
class UserAdmin(BaseUserAdmin):
inlines = (UserProfileInline,)
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
这是我的 models.py
class AppUserProfile(models.Model):
user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
usr_tpid = models.CharField(max_length=20)
usr_cstid = models.CharField(max_length=20)
db_table = 'app_user_profile'
这是我的 views.py,我试图从登录值中获取 usr_cstid。
def login_view(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
print(request.POST)
username = form.cleaned_data['userName']
password = form.cleaned_data['password']
userInfo = AppUserProfile.objects.all().filter(user=username)
print(username)
print(userInfo)
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
groups = [x.name for x in user.groups.all()]
full_info = User.objects.all().filter(username=username)
user_info = User.objects.all().filter(username=username).values('first_name')
print(full_info)
request.session['first_name'] = user_info[0]['first_name']
request.session['user_group'] = groups[0]
# print(user_info, groups)
# return render(request, template_name='landingPage.html', context={'user': first_name})
if 'Administrator' in groups:
# return render(request, template_name='adm_landing_page.html', context={'user': first_name})
return redirect('AdminPortal:adm_landing_page')
if 'Supplier' in groups:
# return HttpResponseRedirect(reverse('adm_landing_page', args=(), kwargs={'user': username}))
return render(request, template_name='supplier_landing_page.html', )
# return redirect('SupplierPortal:supplier_landing_page')
else:
form = LoginForm()
else:
form = LoginForm()
return render(request, 'registration/login.html', {'form': form})
但是我收到以下错误:
ValueError: invalid literal for int() with base 10: 'supplier_ad'
似乎这是导致错误的行:
userInfo = AppUserProfile.objects.all().filter(user=username)
我不确定我哪里错了,或者如何 link 回到那些值。
不确定你想用这个实现什么,但你不能通过 username
string 而不是 user object
或用户来过滤 user object
id
或者你可以这样做
userInfo = AppUserProfile.objects.all().filter(user__username=username)
如果您需要一个 AppUserProfile
实例,请使用 get()
而不是 filter()
我也没有看到你到底想达到什么目的,因为当你登录你的用户时,它总是可以通过 request.user
访问,并且根据关系你可以获得结果配置文件,例如假设 OneToOne
关系 request.user.profile
我正在尝试将 'augmentation' table 与 Admin.User 模型一起使用,以存储与 user/login 相关的其他数据。
这是我的admin.py
class UserProfileInline(admin.StackedInline):
model = AppUserProfile
can_delete = False
verbose_name_plural = 'profile'
# Define a new User admin
class UserAdmin(BaseUserAdmin):
inlines = (UserProfileInline,)
# Re-register UserAdmin
admin.site.unregister(User)
admin.site.register(User, UserAdmin)
这是我的 models.py
class AppUserProfile(models.Model):
user = models.ForeignKey(User, on_delete=models.DO_NOTHING)
usr_tpid = models.CharField(max_length=20)
usr_cstid = models.CharField(max_length=20)
db_table = 'app_user_profile'
这是我的 views.py,我试图从登录值中获取 usr_cstid。
def login_view(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
print(request.POST)
username = form.cleaned_data['userName']
password = form.cleaned_data['password']
userInfo = AppUserProfile.objects.all().filter(user=username)
print(username)
print(userInfo)
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
groups = [x.name for x in user.groups.all()]
full_info = User.objects.all().filter(username=username)
user_info = User.objects.all().filter(username=username).values('first_name')
print(full_info)
request.session['first_name'] = user_info[0]['first_name']
request.session['user_group'] = groups[0]
# print(user_info, groups)
# return render(request, template_name='landingPage.html', context={'user': first_name})
if 'Administrator' in groups:
# return render(request, template_name='adm_landing_page.html', context={'user': first_name})
return redirect('AdminPortal:adm_landing_page')
if 'Supplier' in groups:
# return HttpResponseRedirect(reverse('adm_landing_page', args=(), kwargs={'user': username}))
return render(request, template_name='supplier_landing_page.html', )
# return redirect('SupplierPortal:supplier_landing_page')
else:
form = LoginForm()
else:
form = LoginForm()
return render(request, 'registration/login.html', {'form': form})
但是我收到以下错误:
ValueError: invalid literal for int() with base 10: 'supplier_ad'
似乎这是导致错误的行:
userInfo = AppUserProfile.objects.all().filter(user=username)
我不确定我哪里错了,或者如何 link 回到那些值。
不确定你想用这个实现什么,但你不能通过 username
string 而不是 user object
或用户来过滤 user object
id
或者你可以这样做
userInfo = AppUserProfile.objects.all().filter(user__username=username)
如果您需要一个 AppUserProfile
实例,请使用 get()
而不是 filter()
我也没有看到你到底想达到什么目的,因为当你登录你的用户时,它总是可以通过 request.user
访问,并且根据关系你可以获得结果配置文件,例如假设 OneToOne
关系 request.user.profile