Разрешить конечному пользователю добавлять / удалять поля из модели в 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)
Другие вопросы по тегам