Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Error on migrate: 'Options' object has no attribute 'index_together'. Did you mean: 'unique_together' #105

Open
suryan-s opened this issue Oct 3, 2024 · 1 comment
Assignees
Labels
bug Something isn't working

Comments

@suryan-s
Copy link

suryan-s commented Oct 3, 2024

Describe the bug
On trying out the basic example provided in the repo, i got the below error on migration:

Running migrations:
Traceback (most recent call last):
  File "/app/manage.py", line 22, in <module>
    main()
  File "/app/manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "/usr/local/lib/python3.12/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/usr/local/lib/python3.12/site-packages/django/core/management/__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python3.12/site-packages/django/core/management/base.py", line 413, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/usr/local/lib/python3.12/site-packages/django/core/management/base.py", line 459, in execute
    output = self.handle(*args, **options)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/core/management/base.py", line 107, in wrapper
    res = handle_func(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/core/management/commands/migrate.py", line 357, in handle
    post_migrate_state = executor.migrate(
                         ^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/django/db/migrations/executor.py", line 107, in migrate
    self.recorder.ensure_schema()
  File "/usr/local/lib/python3.12/site-packages/django/db/migrations/recorder.py", line 78, in ensure_schema
    editor.create_model(self.Migration)
  File "/usr/local/lib/python3.12/site-packages/django/db/backends/base/schema.py", line 525, in create_model
    self.deferred_sql.extend(self._model_indexes_sql(model))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/clickhouse_backend/backend/schema.py", line 216, in _model_indexes_sql
    or model._meta.index_together
       ^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'Options' object has no attribute 'index_together'. Did you mean: 'unique_together'?

To Reproduce
The following sample code was used:

from clickhouse_backend import models
from django.db.models import CheckConstraint, IntegerChoices, Q
from django.utils import timezone


class Event(models.ClickhouseModel):
    class Action(IntegerChoices):
        PASS = 1
        DROP = 2
        ALERT = 3
    ip = models.GenericIPAddressField(default="::")
    ipv4 = models.IPv4Field(default="127.0.0.1")
    ip_nullable = models.GenericIPAddressField(null=True)
    port = models.UInt16Field(default=0)
    protocol = models.StringField(default="", low_cardinality=True)
    content = models.JSONField(default=dict)
    timestamp = models.DateTime64Field(default=timezone.now)
    created_at = models.DateTime64Field(auto_now_add=True)
    action = models.EnumField(choices=Action.choices, default=Action.PASS)

    class Meta:
        ordering = ["-timestamp"]
        engine = models.MergeTree(
            primary_key="timestamp",
            order_by=("timestamp", "id"),
            partition_by=models.toYYYYMMDD("timestamp"),
            index_granularity=1024,
            index_granularity_bytes=1 << 20,
            enable_mixed_granularity_parts=1,
        )
        indexes = [
            models.Index(
                fields=["ip"],
                name="ip_set_idx",
                type=models.Set(1000),
                granularity=4
            ),
            models.Index(
                fields=["ipv4"],
                name="ipv4_bloom_idx",
                type=models.BloomFilter(0.001),
                granularity=1
            )
        ]
        constraints = (
            CheckConstraint(
                name="port_range",
                check=Q(port__gte=0, port__lte=65535),
            ),
        )

Expected behavior
This error happens on trying to run the migrate function. Also another thing i noted was that the table to get created on the migrate command besides this error. Also in the migrate.md file, in the limitations its specified that Anonymous indexes and constraints(db_index, unique, index_together, unique_together) are not supported, you must provide names explicitly., so does this have to do anything with the error?
edit: i tried on django=5.0 and same issue.

Versions

  • ClickHouse server version: 24.9.1.3278
  • Python version: 3.12
  • Clickhouse-driver version: Using docker for running clickhouse
  • Django version: 5.1.1
  • Django clickhouse backend version: 1.3
@suryan-s suryan-s added the bug Something isn't working label Oct 3, 2024
@suryan-s suryan-s changed the title [BUG] Error on migrate: 'Options' object has no attribute 'index_together'. Did you mean: 'unique_together' Oct 3, 2024
@dishn
Copy link
Contributor

dishn commented Oct 4, 2024

@suryan-s I believe the fix is to be released: #103

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants