91³Ô¹ÏÍø

Watch CBS News

Metro Atlanta DAs slam Georgia bill removing party labels as "unconstitutional" and targeted

A controversial bill moving through the Georgia legislature is drawing sharp criticism from several metro Atlanta district attorneys, who say the measure would fundamentally change how local officials are elected and could even violate constitutional protections.

, which recently passed the Georgia Senate, would require certain county offices — including district attorneys, county commissioners, and tax commissioners — to run in nonpartisan elections in counties like Fulton, DeKalb, Gwinnett, Clayton, and Cobb starting in 2028. 

Supporters argue the change would keep public safety roles focused on governance rather than politics. But critics — including multiple district attorneys — say the proposal is anything but neutral.

Fani Willis: "Clearly unconstitutional"

Fulton County District Attorney Fani Willis is among the most vocal opponents, calling the bill both politically motivated and discriminatory.

"This bill is nothing more than a continuation of Burt Jones's political attack on me and my metro Atlanta colleagues," Willis said. "The targeting of five African-American women Democrats… is racist, sexist and clearly unconstitutional." 

Willis' comments underscore a broader concern shared by several prosecutors: that the bill disproportionately impacts Black women serving in elected roles across metro Atlanta.

Gwinnett DA: "Robbing voters of choice"

Gwinnett County District Attorneyechoed those concerns, focusing on what she described as a direct threat to voter transparency.

"This legislation robs voters of their opportunity to select candidates with party affiliation," she said. 

Austin-Gatson emphasized that Georgia's current system — primaries followed by general elections — allows voters to better evaluate candidates and ensures fairness in the process.

"To have legislators craft a bill that eliminates voters' options at the ballot is unconscionable," she added. 

Clayton County leaders raise equity concerns

Leaders in Clayton County also formally opposed the bill in a letter to House Speaker Jon Burns, warning it could disproportionately impact minority communities and Democratic officials.

The letter argues the legislation could "disrupt existing representation" and "dilute the electoral strength of voters who rely on party alignment." 

Officials also questioned the policy rationale behind the bill, saying there is no clear justification for removing partisan labels from these offices.

"Election rules must be neutral and uniformly applied," the letter states, warning that deviations could undermine local control and consistency across Georgia. 

DeKalb DA threatens legal action

took the strongest stance yet, signaling that a legal challenge could be imminent if the bill becomes law.

"The vote… is a blatant attack by Republicans to undermine the will of voters," Boston said. "My colleagues and I are prepared to file suit immediately if this unconstitutional bill passes." 

Boston also pointed to potential financial consequences, warning taxpayers could be on the hook for costly legal battles.

What's next

The bill still must pass the Georgia House and be signed by the governor before becoming law. If enacted, the changes would not take effect until 2028.

Meanwhile, CBS News Atlanta has reached out to the Cobb County District Attorney's Office for comment and will update this story as new responses come in. 

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });