Как мне сохранить несколько данных флажков в списке массивов? - PullRequest
0 голосов
/ 09 января 2020

Я работаю над формой Django с несколькими флажками, которая выглядит следующим образом:

Форма с несколькими флажками

Мне удалось сохранить данные в нескольких отдельных столбцах:

изображение строки данных в моей базе данных

Мой вопрос заключается в том, как сохранить несколько данных флажков в одном столбце вместо нескольких отдельных столбцы?

Вот флажки HTML

<label class="form-control acl-label">Project Management</label>
<div><input class="project" value="listing" name="project[]" type="checkbox" id="project-listing.{{user.id}}"> <label for="project-listing.{{user.id}}">Listing</label></div>
<div><input class="project" value="create" name="project[]" type="checkbox" id="project-create.{{user.id}}"> <label for="project-create.{{user.id}}">Create</label></div>
<div><input class="project" value="edit" name="project[]" type="checkbox" id="project-edit.{{user.id}}"> <label for="project-edit.{{user.id}}">Edit</label></div>
<div><input class="project" value="delete" name="project[]" type="checkbox" id="project-delete.{{user.id}}"> <label for="project-delete.{{user.id}}">Delete</label></div> <br/>

Вот код моего файла view.py

project_mgmt = request.POST.getlist('project[]')
engagement_mgmt = request.POST.getlist('engagement[]')
issue_mgmt = request.POST.getlist('issue[]')
user_mgmt = request.POST.getlist('user[]')
reporting_mgmt = request.POST.getlist('reporting[]')
setting = request.POST.getlist('setting[]')
audit_log = request.POST.getlist('audit[]')

AccessControl.objects.filter(uid_uname=user_id).update(project_mgmt=project_mgmt, engagement_mgmt=engagement_mgmt, issue_mgmt=issue_mgmt, 
user_mgmt=user_mgmt, reporting_mgmt=reporting_mgmt, setting=setting, audit_log=audit_log)

models.py

class AccessControl(models.Model):
    uid_index = models.ForeignKey(UserDetail, on_delete=models.CASCADE)
    uid_uname = models.CharField(max_length=200, default=None)
    project_mgmt = models.TextField(default=None, null=True)
    engagement_mgmt = models.TextField(default=None, null=True)
    issue_mgmt = models.TextField(default=None, null=True)
    user_mgmt = models.TextField(default=None, null=True)
    reporting_mgmt = models.TextField(default=None, null=True)
    setting = models.TextField(default=None, null=True)
    audit_log  = models.TextField(default=None, null=True)

1 Ответ

0 голосов
/ 10 января 2020

Мне удалось сохранить данные флажка в одном столбце в моей базе данных. Вот что я сделал:

HTML

Укажите одинаковое значение для атрибута name для всех флажков.

<div>
<label class="form-control acl-label">Project Management</label>
<div><input class="project" value="project-listing" name="permissions[]" type="checkbox" id="project-listing.{{user.id}}" {% if 'project-listing' in user.permissions %} checked {% endif %}> <label for="project-listing.{{user.id}}" >Listing</label></div>
<div><input class="project" value="project-create" name="permissions[]" type="checkbox" id="project-create.{{user.id}}" {% if 'project-create' in user.permissions %} checked {% endif %}> <label for="project-create.{{user.id}}">Create</label></div>
<div><input class="project" value="project-edit" name="permissions[]" type="checkbox" id="project-edit.{{user.id}}" {% if 'project-edit' in user.permissions %} checked {% endif %}> <label for="project-edit.{{user.id}}">Edit</label></div>
<div><input class="project" value="project-delete" name="permissions[]" type="checkbox" id="project-delete.{{user.id}}" {% if 'project-delete' in user.permissions %} checked {% endif %}> <label for="project-delete.{{user.id}}">Delete</label></div> <br/>
</div>

<div>
<label class="form-control acl-label">Engagement Management</label>
<div><input class="engagement" value="engagement-allListing" name="permissions[]" type="checkbox" id="engagement-allListing.{{user.id}}" {% if 'engagement-allListing' in user.permissions %} checked {% endif %}> <label for="engagement-allListing.{{user.id}}">All Listing</label> </div>
<div><input class="engagement" value="engagement-listing" name="permissions[]" type="checkbox" id="engagement-listing.{{user.id}}" {% if 'engagement-listing' in user.permissions %} checked {% endif %}> <label for="engagement-listing.{{user.id}}">Listing</label></div>
<div><input class="engagement" value="engagement-create" name="permissions[]" type="checkbox" id="engagement-create.{{user.id}}" {% if 'engagement-create' in user.permissions %} checked {% endif %}> <label for="engagement-create.{{user.id}}">Create</label></div>
<div><input class="engagement" value="engagement-edit" name="permissions[]" type="checkbox" id="engagement-edit.{{user.id}}" {% if 'engagement-edit' in user.permissions %} checked {% endif %}> <label for="engagement-edit.{{user.id}}">Edit</label></div>
<div><input class="engagement" value="engagement-delete" name="permissions[]" type="checkbox" id="engagement-delete.{{user.id}}" {% if 'engagement-delete' in user.permissions %} checked {% endif %}> <label for="engagement-delete.{{user.id}}">Delete</label></div> <br/>
</div>

функция отправки в views.py

Здесь моя функция отправки обновляет базу данных и сохраняет данные флажков в массивах

permissions = request.POST.getlist('permissions[]')
AccessControl.objects.filter(uid_uname=user_id).update(permissions=permissions)

Кроме того, не забудьте изменить модели .py для хранения данных в текстовом поле, например:

permissions = models.TextField(default=None, null=True)

Конечный результат выглядит следующим образом: Флажок данных в массивах с использованием одного столбца базы данных

Я надеюсь, что это поможет другим, сталкивающимся с той же самой проблемой. Удачного кодирования! :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...