mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-19 09:53:34 -06:00
Closes #8765: Display and enable bulk clearing of user's table preferences
This commit is contained in:
parent
21e3159711
commit
e6072a51f8
@ -8,6 +8,7 @@
|
||||
<form method="post" action="" id="preferences-update">
|
||||
{% csrf_token %}
|
||||
|
||||
{# Built-in preferences #}
|
||||
{% for group, fields in form.fieldsets %}
|
||||
<div class="field-group my-5">
|
||||
<div class="row mb-2">
|
||||
@ -19,6 +20,7 @@
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
{# Plugin preferences #}
|
||||
{% with plugin_fields=form.plugin_fields %}
|
||||
{% if plugin_fields %}
|
||||
<div class="field-group my-5">
|
||||
@ -32,6 +34,50 @@
|
||||
{% endif %}
|
||||
{% endwith %}
|
||||
|
||||
{# Table configurations #}
|
||||
<div class="field-group my-5">
|
||||
<div class="row mb-2">
|
||||
<h5 class="offset-sm-3">Table Configurations</h5>
|
||||
</div>
|
||||
<div class="row">
|
||||
{% if request.user.config.data.tables %}
|
||||
<label class="col-sm-3 col-form-label text-lg-end">
|
||||
Clear table preferences
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<table class="table table-hover object-list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
<input type="checkbox" class="toggle form-check-input" title="Toggle All">
|
||||
</th>
|
||||
<th>Table</th>
|
||||
<th>Ordering</th>
|
||||
<th>Columns</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for table, prefs in request.user.config.data.tables.items %}
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" name="pk" value="tables.{{ table }}" class="form-check-input" />
|
||||
</td>
|
||||
<td>{{ table }}</td>
|
||||
<td>{{ prefs.ordering|join:", "|placeholder }}</td>
|
||||
<td>{{ prefs.columns|join:", "|placeholder }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="offset-sm-3">
|
||||
<p class="text-muted">None found</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="text-end my-3">
|
||||
<a class="btn btn-outline-secondary" href="{% url 'user:preferences' %}">Cancel</a>
|
||||
<button type="submit" name="_update" class="btn btn-primary">Save </button>
|
||||
|
@ -50,6 +50,11 @@ class UserConfigForm(BootstrapMixin, forms.ModelForm, metaclass=UserConfigFormMe
|
||||
'data_format',
|
||||
)),
|
||||
)
|
||||
# List of clearable preferences
|
||||
pk = forms.MultipleChoiceField(
|
||||
choices=[],
|
||||
required=False
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = UserConfig
|
||||
@ -63,12 +68,23 @@ class UserConfigForm(BootstrapMixin, forms.ModelForm, metaclass=UserConfigFormMe
|
||||
|
||||
super().__init__(*args, instance=instance, **kwargs)
|
||||
|
||||
# Compile clearable preference choices
|
||||
self.fields['pk'].choices = (
|
||||
(f'tables.{table_name}', '') for table_name in instance.data.get('tables', [])
|
||||
)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
|
||||
# Set UserConfig data
|
||||
for pref_name, value in self.cleaned_data.items():
|
||||
if pref_name == 'pk':
|
||||
continue
|
||||
self.instance.set(pref_name, value, commit=False)
|
||||
|
||||
# Clear selected preferences
|
||||
for preference in self.cleaned_data['pk']:
|
||||
self.instance.clear(preference)
|
||||
|
||||
return super().save(*args, **kwargs)
|
||||
|
||||
@property
|
||||
|
Loading…
Reference in New Issue
Block a user