Как показать названия категорий из таблицы базы данных mysql в выпадающем списке формы django

Я работаю над веб-приложением для платформы управления статьями с использованием django. Я создал форму регистрации, используя форму django, где я хочу показать названия категорий из таблицы категорий.

Это код для создания таблицы категорий, где у меня есть два столбца. Один - cid, который является ID, а другой - category_name. Здесь имя категории будет, например: Технология, Программная инженерия, Медицина и т.д.

blog.models.py

from django.db import models

# Create your models here.
class Category(models.Model):
    cid = models.AutoField(primary_key=True, blank=True)
    category_name = models.CharField(max_length=100)

    def __str__(self):
        return self.category_name

Cid является внешним ключом для таблицы users, потому что каждый пользователь должен выбрать название категории из поля специализации, чтобы зарегистрировать учетную запись в этом приложении. Так как я использую встроенную модель пользователя, поэтому я добавил cid в качестве внешнего ключа в таблицу пользователей, как показано ниже.

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)

В файле forms.py я добавил поле email и специализацию, чтобы отобразить их в форме регистрации, как показано ниже. Однако я не уверен, что часть кода категории в порядке или нет. не могли бы вы взглянуть на это?
users/forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from blog.models import Category

class UserRegisterForm(UserCreationForm):
    email = forms.EmailField()

    category = Category()


    cid = forms.CharField(label='Specialization', widget=forms.Select(choices=category.category_name))


    class Meta:
        model = User
        fields = ['username', 'email', 'password1', 'password2', 'cid']

Это файл register.html:

файл register.html

{% extends "users/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
    <div class="content-section">
        <form method="POST">
            {% csrf_token %}
            <fieldset class="form-group">
                {{ form| crispy }}
            </fieldset>
            <div class="form-group">
                <button class="btn btn-outline-info" type="submit">Sign Up</button>
            </div>
        </form>
        <div class="border-top pt-3">
            <small class="text-muted">
                Already Have An Account? <a class="ml-2" href="{% url 'login' %}">Sign In</a>
            </small>
        </div>
    </div>
{% endblock content %}

Я хочу показать названия категорий в выпадающем списке специализации, которые будут получены из таблицы cateogry, но эти названия категорий не отображаются в выпадающем списке. Страница регистрации UI

Я не понимаю, как решить эту проблему. Может ли кто-нибудь помочь мне решить эту проблему. Какова будет часть кодирования для решения этой проблемы.

Я пытался добавить названия категорий в выпадающий список специализации, но у меня не получилось. Я хочу, чтобы кто-нибудь решил эту проблему

Прежде всего, категория должна быть полем, а не классом. Используйте для этого ModelChoiceField.

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