Мне нужно сохранить информацию + User.id или имя пользователя в базу данных в Django

У меня возникла проблема с сохранением информации об аутентификации пользователя с помощью info. У меня не было некоторых 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

Мой views.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 и это дело, я думаю, такое простое, но не работает.

В shorter функции в views.py изменение

obj = Url.create(long_url, User)

to

obj = Url.create(long_url, request.user)

Вернуться на верх