Разрешить конечному пользователю добавлять / удалять поля из модели в Django
Пожалуйста, рассмотрите такую ситуацию: у меня на сайте несколько клиентов, и каждый может создать сотрудника из своей панели управления. Но каждому из них могут потребоваться разные поля в форме или пользовательской модели.
Пример:Client_1 запрашивает имя, адрес электронной почты, телефон в форме. Client_2 запрашивает имя, телефон, адрес и дату рождения.
Таким образом, из формы / модели по умолчанию клиент должен иметь возможность удалять ненужные поля и создавать свои обязательные поля.
Надеюсь, это можно сделать с помощью Django или ContentTypes.
Пожалуйста, кто-нибудь знает, пожалуйста, предоставьте подробный ответ. Это было бы действительно полезно.
1 ответ
Это действительно зависит от вашей ситуации. Самая большая проблема - это тип ввода. Сложно обобщить
BooleanField
,
CharField
,
IntegerField
или же
TextField
в одно поле какой-то модели. Но я бы начал пытаться сохранить все в 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)