我正在使用django开发一个文章管理平台webapp。我已经使用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是用户表的外键,因为每个用户必须从专门化字段中选择一个类别名称,才能在此应用程序中注册帐户。由于我使用的是内置用户模型,因此我将cid作为外键添加到用户表中,如下所示。
用户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文件中,我已经添加了电子邮件和专业字段,以便在注册表中显示它们,如下所示。2但是,我不确定类别代码部分是否正确。3您可以查看一下吗?
用户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 %}
我想在此处的专门化下拉列表中显示来自类别表的类别名称,但这些类别名称未显示在下拉列表中。Registration page UI
我不明白如何解决这个问题。有人能帮我解决这个问题吗?什么是编码部分来解决这个问题。
我试图在专门化下拉列表中添加类别名称,但失败了。我希望任何人都能解决此问题
1条答案
按热度按时间y1aodyip1#
首先,category需要是一个字段,而不是一个类。为此,请使用ModelChoiceField。