在Django的MultipleChoiceField中动态添加选择

时间:2019-02-27 05:10:20

标签: python django

我是Django的新手,正在创建一个应用程序,我需要在其中显示用于用户电子邮件的复选框。问题是,启动服务器时会填充元组,但是不会直接显示新用户的电子邮件,因此我需要重新启动服务器。我该怎么做呢? 这是我的forms.py:

from django import forms
from .models import User


class CustomUserCreationForm(forms.ModelForm):
    password = forms.CharField(widget=forms.PasswordInput)

class Meta:
    model = User
    fields = ('first_name', 'last_name', 'email', 'password')


class Login(forms.Form):
    email = forms.EmailField(max_length=250)
    password = forms.CharField(widget=forms.PasswordInput)


class AuthUserCheckbox(forms.Form):

    def __init__(self, *args, **kwargs):
        super(AuthUserCheckbox, self).__init__(*args, **kwargs)

这是我的模型。py:

from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    username = None
    email = models.EmailField(unique=True)
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['first_name', 'last_name']

2 个答案:

答案 0 :(得分:1)

您需要MultipleChoiceFieldCheckboxSelectMultiple小部件,您可以像这样在__init__中的初始化时填充该小部件:

class AuthUserCheckbox(forms.Form):
    email = forms.MultipleChoiceField(choices = [], widget=forms.CheckboxSelectMultiple, required=True)

def __init__(self, *args, **kwargs):
    super(AuthUserCheckbox, self).__init__(*args, **kwargs)
    self.fields['email'] = forms.MultipleChoiceField(choices=[ o.email for o in User.objects.all()]) #your query here

答案 1 :(得分:0)

您将必须使用ModelMultipleChoiceField。例如:

class AuthUserCheckbox(forms.Form):

    emails = forms.ModelMultipleChoiceField(queryset=User.objects.all())

    def __init__(self, *args, **kwargs):
        super(AuthUserCheckbox, self).__init__(*args, **kwargs)
相关问题