fix: change chexbox positions

This commit is contained in:
mohamad
2026-07-19 15:03:27 +03:30
parent 1042fba121
commit 3c50abf404
4 changed files with 131 additions and 46 deletions
+20 -46
View File
@@ -51,14 +51,24 @@ class ProjectBriefAdmin(admin.ModelAdmin):
(
"Brief",
{
"description": (
"Each field has its own lock and website visibility controls. "
"Lock prevents client edits; Show on website includes the field "
"on the public card when the project is published."
),
"fields": (
"client",
"title",
"category",
"locked",
"show_on_website",
("title", "lock_title", "show_title_on_website"),
("category", "lock_category", "show_category_on_website"),
"description",
"budget_range",
"desired_deadline",
("lock_description", "show_description_on_website"),
("budget_range", "lock_budget_range", "show_budget_on_website"),
("desired_deadline", "lock_desired_deadline", "show_deadline_on_website"),
"reference_links",
("lock_reference_links", "show_references_on_website"),
("lock_attachments", "show_attachments_on_website"),
),
},
),
@@ -75,34 +85,13 @@ class ProjectBriefAdmin(admin.ModelAdmin):
},
),
(
"Client editing locks",
"Website showcase overrides",
{
"description": (
"Lock individual fields so the client cannot change them while "
"the brief is still editable. 'Lock entire project' blocks all "
"client edits regardless of status."
"Optional public-facing content. Leave blank to fall back to the "
"brief field values above."
),
"fields": (
"locked",
"lock_title",
"lock_category",
"lock_description",
"lock_budget_range",
"lock_desired_deadline",
"lock_reference_links",
"lock_attachments",
),
},
),
(
"Website showcase",
{
"description": (
"Control whether this project appears on the public website and "
"which fields are visible on the website card."
),
"fields": (
"show_on_website",
"public_title",
"public_summary",
"public_tags",
@@ -112,28 +101,13 @@ class ProjectBriefAdmin(admin.ModelAdmin):
),
},
),
(
"Website field visibility",
{
"description": (
"Each field can be independently shown or hidden on the website card."
),
"fields": (
"show_title_on_website",
"show_category_on_website",
"show_description_on_website",
"show_budget_on_website",
"show_deadline_on_website",
"show_references_on_website",
"show_attachments_on_website",
),
"classes": ("collapse",),
},
),
)
inlines = [ProjectBriefAttachmentInline, ProjectInternalNoteInline]
date_hierarchy = "submitted_at"
class Media:
css = {"all": ("css/project-brief-admin.css",)}
def save_formset(self, request, form, formset, change):
instances = formset.save(commit=False)
for instance in instances:
+1
View File
@@ -93,6 +93,7 @@ class ProjectBrief(models.Model):
)
locked = models.BooleanField(
default=False,
verbose_name="Lock project",
help_text="Lock the whole project so the client cannot edit it at all.",
)
lock_title = models.BooleanField(default=False, help_text="Lock title for the client.")
+89
View File
@@ -0,0 +1,89 @@
#projectbrief_form .project-brief-fieldset > .form-row.multi-field {
display: grid;
grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr);
gap: 1rem 1.25rem;
align-items: start;
padding-top: 0.75rem;
border-top: 1px solid #e5e7eb;
}
#projectbrief_form .project-brief-fieldset > .form-row.multi-field:first-of-type {
border-top: none;
}
#projectbrief_form .project-brief-field-header {
display: grid;
grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr);
gap: 1rem 1.25rem;
margin: 0.75rem 0 0.25rem;
padding: 0.5rem 0;
border-bottom: 2px solid #cbd5e1;
font-size: 0.75rem;
font-weight: 700;
text-transform: uppercase;
letter-spacing: 0.04em;
color: #64748b;
}
#projectbrief_form .project-brief-field-header span:nth-child(2),
#projectbrief_form .project-brief-field-header span:nth-child(3) {
text-align: left;
}
#projectbrief_form .project-brief-fieldset .field-lock_title,
#projectbrief_form .project-brief-fieldset .field-lock_category,
#projectbrief_form .project-brief-fieldset .field-lock_description,
#projectbrief_form .project-brief-fieldset .field-lock_budget_range,
#projectbrief_form .project-brief-fieldset .field-lock_desired_deadline,
#projectbrief_form .project-brief-fieldset .field-lock_reference_links,
#projectbrief_form .project-brief-fieldset .field-lock_attachments,
#projectbrief_form .project-brief-fieldset .field-show_title_on_website,
#projectbrief_form .project-brief-fieldset .field-show_category_on_website,
#projectbrief_form .project-brief-fieldset .field-show_description_on_website,
#projectbrief_form .project-brief-fieldset .field-show_budget_on_website,
#projectbrief_form .project-brief-fieldset .field-show_deadline_on_website,
#projectbrief_form .project-brief-fieldset .field-show_references_on_website,
#projectbrief_form .project-brief-fieldset .field-show_attachments_on_website {
padding-top: 0.15rem;
}
#projectbrief_form .project-brief-fieldset .field-lock_title label,
#projectbrief_form .project-brief-fieldset .field-lock_category label,
#projectbrief_form .project-brief-fieldset .field-lock_description label,
#projectbrief_form .project-brief-fieldset .field-lock_budget_range label,
#projectbrief_form .project-brief-fieldset .field-lock_desired_deadline label,
#projectbrief_form .project-brief-fieldset .field-lock_reference_links label,
#projectbrief_form .project-brief-fieldset .field-lock_attachments label,
#projectbrief_form .project-brief-fieldset .field-show_title_on_website label,
#projectbrief_form .project-brief-fieldset .field-show_category_on_website label,
#projectbrief_form .project-brief-fieldset .field-show_description_on_website label,
#projectbrief_form .project-brief-fieldset .field-show_budget_on_website label,
#projectbrief_form .project-brief-fieldset .field-show_deadline_on_website label,
#projectbrief_form .project-brief-fieldset .field-show_references_on_website label,
#projectbrief_form .project-brief-fieldset .field-show_attachments_on_website label {
font-size: 0.78rem;
font-weight: 600;
color: #475569;
}
#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-lock_description,
#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-lock_reference_links,
#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-lock_attachments,
#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-show_description_on_website,
#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-show_references_on_website,
#projectbrief_form .project-brief-fieldset .form-row:not(.multi-field) .field-show_attachments_on_website {
display: inline-block;
width: calc(50% - 0.75rem);
vertical-align: top;
margin-right: 1rem;
}
#projectbrief_form .field-description textarea,
#projectbrief_form .field-reference_links textarea {
max-width: 100%;
}
#projectbrief_form .field-lock_attachments .help,
#projectbrief_form .field-show_attachments_on_website .help {
margin-top: 0.25rem;
}
@@ -0,0 +1,21 @@
{% extends "admin/change_form.html" %}
{% block field_sets %}
{{ block.super }}
<script>
(function () {
const form = document.getElementById("projectbrief_form");
if (!form) return;
const fieldsets = form.querySelectorAll("fieldset.module.aligned");
if (!fieldsets.length || form.querySelector(".project-brief-field-header")) return;
const briefFieldset = fieldsets[0];
const titleRow = briefFieldset.querySelector(".form-row.field-title");
if (!titleRow) return;
const header = document.createElement("div");
header.className = "project-brief-field-header";
header.innerHTML = "<span>Field</span><span>Lock</span><span>Show on website</span>";
briefFieldset.classList.add("project-brief-fieldset");
briefFieldset.insertBefore(header, titleRow);
})();
</script>
{% endblock %}