Как показать названия категорий из таблицы базы данных 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.