如果选择字段不存在,则向选择字段添加选项

时间:2014-05-26 11:34:51

标签: django forms model views

您好我目前有这个型号

class Member(models.Model,get_fields):
    first_name = models.CharField(max_length = 20)
    last_name = models.CharField(max_length = 20)

ROLE_CHOICES = (
    ('PLAYER', 'Player'),
    ('CONDUCTOR', 'Conductor'), 
    ('COMMITTEEMEMBER', 'Committee Member'),
    ('LIBRARIAN', 'Librarian'),
    ('TUTOR', 'Tutor'),
    ('ACCOUNTANT', 'Accountant'),
    ('PRESIDENT', 'President'),
    ('CHAIRMAN', 'Chairman'),
    ('SECRETARY', 'Secretary'),
    ('OTHER', 'Other')
)
role_choices = models.CharField(_('Role'), max_length = 20, choices = ROLE_CHOICES)

如果用户不可用,我希望用户能够添加额外的角色选择。所以我也创造了

class ExtraRole(models.Model,get_fields):
    name = models.CharField(max_length = 20)

如何设置表单以便用户能够在创建成员视图上创建一个extrarole(如果它不存在),然后将其添加到role_choices元组中?是否可以将foreignkey添加到role_choices元组?这是正确的方法吗?

1 个答案:

答案 0 :(得分:1)

可以在role_choices中添加类似于外键的内容,但这对创建来说会非常复杂,也可能是“错误”的方法。您应该为角色选择创建一个新模型。如果选择不会改变,则使用元组作为您的选择很好,但如果您想让用户能够编辑这些选项,那么您需要将其创建为模型并将外键字段添加到成员模型

class MemberRole(models.Model):
    name = models.CharField(max_length=20)

class Member(models.Model, get_fields):
    first_name = models.CharField(max_length = 20)
    last_name = models.CharField(max_length = 20)
    role_choices = models.ForeignKey(MemberRole)