【问题标题】:Allow end user to add / remove fields from model in Django允许最终用户在 Django 中从模型中添加/删除字段
【发布时间】:2021-05-14 10:09:56
【问题描述】:

请考虑这种情况: 我的网站上有几个客户,每个客户都可以从他的仪表板创建员工。但是他们每个人都可能需要表单或用户模型中的不同字段。

示例: Client_1 想要姓名、电子邮件、电话在表格中 Client_2 想要姓名、电话、地址和出生日期

因此,从默认表单/模型客户端应该能够删除不需要的字段并创建他的必填字段。

我希望这可以使用 Django 或 ContentTypes 来完成

请知道的人提供详细的答案。真的很有帮助。

【问题讨论】:

    标签: django django-models django-forms django-contenttypes django-3.2


    【解决方案1】:

    这真的取决于你的情况。最大的问题是输入类型。很难将BooleanFieldCharFieldIntegerFieldTextField 推广到某个模型的一个领域。但我会开始尝试将所有内容保存到 CharFields,然后将它们转换为表单中的正确输入。 模型看起来像这样:

    class CustomField(models.Model)
        label = models.CharField('label', max_length=100)
        input_type = models.ChoiceField('label', choices=(('text', 'text'), ('integer', 'integer')) max_length=100)
        value = models.CharField('value', max_length=100)
    
    
    class Contact(models.Model):
        custom_fields = models.ManyToManyField(CustomField)
    

    变体 2 从您的示例中,您也可以尝试覆盖所有字段,然后进行可见性设置。因此,用户可以看到他们可以选择的所有字段,并且可以根据需要进行更改。

    类似这样的:

    class Contact(models.Model):
        name = models.CharField('name', max_length=100)
        email = models.CharField('email', max_length=100)
        phone = models.CharField('phone', max_length=100)
        address = models.CharField('address', max_length=100)
        birth_date = models.DateField('birth_date', max_length=100)
    
    class VisibilitySettings(models.Model):
        name = models.BooleanField(default=True)
        email = models.BooleanField(default=True)
        phone = models.BooleanField(default=True)
        address = models.BooleanField(default=True)
        birth_date = models.BooleanField(default=True)
    

    【讨论】:

    • 我认为第二种变体可以完成这项工作;但我需要再次填写所有字段null=True, blank=True
    猜你喜欢
    • 1970-01-01
    • 2013-03-07
    • 2017-11-10
    • 2013-01-05
    • 2012-01-05
    • 2018-05-08
    • 2019-06-26
    • 2014-08-09
    • 2019-01-23
    相关资源
    最近更新 更多