[英]I need save info + User.id or username to database in Django
我在使用信息保存有关身份验证用户的信息时遇到了一些问题。 我没有一些 id,但 django 有异常。 我的 model.py
from django.contrib.auth.models import User
from django.db import models
from hashlib import md5
from django.conf import settings
# Create your models here.
class Url(models.Model):
long_url = models.CharField(unique=True,max_length=500)
short_url = models.CharField(unique=True, max_length=100)
user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
id = models.BigAutoField(primary_key=False, null=True)
@classmethod
def create(self, long_url, user, id):
tmp = md5(long_url.encode()).hexdigest()[:6]
tmp = '127.0.0.1:8000' + '/' + tmp
try:
obj = self.objects.create(id=id,long_url=long_url, short_url=tmp, user=user)
except:
obj = self.objects.get(long_url=long_url, user=user)
return obj
我的观点.py
from django.contrib.auth.models import User
from django.shortcuts import render, redirect
from .forms import UserRegistration, UserLogIn
from .models import Url
from django.http import HttpResponse
from django.contrib.auth import authenticate, login
# Create your views here.
def register(request):
if request.method == 'POST':
user_form = UserRegistration(request.POST)
if user_form.is_valid():
new_user = user_form.save(commit=False)
new_user.set_password(user_form.cleaned_data['password'])
new_user.save()
return render(request, 'register.html', {'new_user': new_user})
else:
user_form = UserRegistration()
return render(request, 'register.html', {'user_form': user_form})
def shorter(request):
if request.method == 'POST':
long_url = request.POST.get('long_url')
obj = Url.create(long_url, User)
return render(request, 'short.html', {
'short_url': request.get_host() + '/' + obj.short_url[-6:]})
return render(request, 'shorter.html')
我的 forms.py
from django.contrib.auth.models import User
from django import forms
class UserRegistration(forms.ModelForm):
password = forms.CharField(label='Password', widget=forms.PasswordInput)
password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput)
class Meta:
model = User
fields = ('username', 'first_name', 'email')
def clean_password2(self):
cd = self.cleaned_data
if cd['password'] != cd['password2']:
raise forms.ValidationError('Passwords don\'t match.')
return cd['password2']
class UserLogIn(forms.Form):
username = forms.CharField()
password = forms.CharField(widget=forms.PasswordInput)
当我想保存时,我有异常字段 'id' 需要一个数字,但得到了 <class 'django.contrib.auth.models.User'>。 你能帮我解决这个例外吗?但我是 Django 的初学者,我认为这种情况很简单但不起作用。
在views.py中shorter
的function更改
obj = Url.create(long_url, User)
至
obj = Url.create(long_url, request.user)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.