Id категории хранится как null для пользователя в django
Я начал проект django, в котором пользователи должны выбрать категорию при создании аккаунта, включая другие учетные данные. Ниже я привел .py файл модели Category, Post и CustomUser. Файл forms.py предназначен для файла researcher-profile.html. Поэтому, когда пользователь будет входить в систему, он будет перенаправлен на этот профиль исследователя. Я установил cid в модели CustomUser как null, чтобы я мог создать суперпользователя. Но для обычного пользователя обязательно нужно выбрать категорию, поэтому я указал специализацию, которая является cid, как обязательное поле в forms.py. Но проблема в том, что когда обычный пользователь регистрирует аккаунт на странице регистрации, то в базе данных он сохраняет null в поле cid, даже если пользователь выбрал категорию при регистрации. Как решить эту проблему?
blog/models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth import get_user_model
from ckeditor.fields import RichTextField
# Create your models here.
class Category(models.Model):
cid = models.AutoField(primary_key=True)
category_name = models.CharField(max_length=100)
def __str__(self):
return self.category_name
class Post(models.Model):
aid = models.AutoField(primary_key=True)
image = models.ImageField(default='blog-default.png', upload_to='images/')
title = models.CharField(max_length=200)
# content = models.TextField()
content = RichTextField()
created = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
cid = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='specialization')
approved = models.BooleanField('Approved', default=False)
like = models.ManyToManyField(get_user_model(), related_name='likes', black=True)
def __str__(self):
return self.title
users/model.py
from django.db import models
from blog.models import Category
from django.contrib.auth.models import AbstractUser
# Create your models here.
class CustomUser(AbstractUser):
cid = models.ForeignKey(Category, on_delete=models.CASCADE, black=True, null=True)
profile_pic = models.ImageField(default='default_person.jpg', upload_to='profile_pics')
users/forms.py
from django import forms
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm
from blog.models import Category
User = get_user_model()
class UserRegisterForm(UserCreationForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['specialization'].required = True
email = forms.EmailField()
categories = Category.objects.all()
specialization = forms.ModelChoiceField(queryset=categories)
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2', 'specialization']
blog/researcher-profile.html
{% extends 'users/base.html' %}
{% block content %}
<div class="content-section">
<div class="media">
<img class="rounded-circle account-img" src="{{ user.profile_pic.url }}" width="125" height="125">
<div class="media-body">
<h2 class="account-heading" style="margin-left: 30px">{{ user.username }}</h2>
<p class="text-secondary" style="margin-left: 30px">{{ user.email }}</p>
<a href="{% url 'user-update' %}" class="btn btn-secondary btn-sm" style="margin-left: 30px;"> Edit Profile </a>
</div>
</div>
</div>
{% for post in posts %}
{% if post.approved %}
<div class="card mb-3">
<img class="card-img-top" src="{{ post.image.url }}" alt="Card image cap">
<div class="card-body">
<h5 class="card-title">{{ post.title|truncatechars:70 }}</h5>
<p class="card-text">{{ post.content|truncatechars:200|safe }}</p>
<a href="{% url 'post-detail' post.aid %}" class="btn btn-primary"> See Details </a>
</div>
<div class="card-footer text-secondary">
<a class="mr-2" href="{% url 'other-people-profile' post.author.username %}">{{ post.author }}</a>||
{{ post.created|date:"F d, Y" }}
</div>
</div>
{% endif %}
{% endfor %}
{% endblock content %}