Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion modeltranslation/tests/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import shutil
import sys
from decimal import Decimal

from modeltranslation.translator import TranslationOptions
import pytest
from django import forms
from django.apps import apps as django_apps
Expand Down Expand Up @@ -2345,6 +2345,12 @@ def test_multi_inheritance(self):
assert "titlee" in clsb.fields
assert 5 == len(clsb.fields) # there are no repetitions

def test_str_instead_of_tuple(self):
with pytest.raises(ImproperlyConfigured):

class ModelOptions(TranslationOptions):
fields = "titlea"


class UpdateCommandTest(ModeltranslationTestBase):
def test_update_command(self):
Expand Down
14 changes: 13 additions & 1 deletion modeltranslation/translator.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from __future__ import annotations

from textwrap import dedent
from copy import deepcopy
from functools import partial
from typing import Any, Callable, ClassVar, cast
Expand Down Expand Up @@ -79,7 +80,18 @@ class FieldsAggregationMetaClass(type):
fields: Sequence[str]

def __new__(cls, name: str, bases: tuple[type, ...], attrs: dict[str, Any]) -> type:
attrs["fields"] = set(attrs.get("fields", ()))
fields = attrs.get("fields", ())
if isinstance(fields, str):
raise ImproperlyConfigured(
dedent(f"""`fields` property should be list or tuple, received `str`.

Hint: Replace with:

fields = ("{fields}", )
""")
)
else:
attrs["fields"] = set(fields)
for base in bases:
if isinstance(base, FieldsAggregationMetaClass):
attrs["fields"].update(base.fields)
Expand Down