r4fek / django-cassandra-engine

Django Cassandra Engine - the Cassandra backend for Django
BSD 2-Clause "Simplified" License
365 stars 85 forks source link

Composite Key (clustering columns) is throwing error #114

Open CaliBitcoins opened 6 years ago

CaliBitcoins commented 6 years ago

Hello, trying to get a Django/Cassandra project off the ground, but when I attempt to create some cql tables with composite keys in models.py I receive an error that instructs me to write an additional class. Has anyone else encountered this issue?

in models.py: `from django.db import models from cassandra.cqlengine import columns from django_cassandra_engine.models import DjangoCassandraModel

class Article(DjangoCassandraModel): slug = columns.Text(primary_key=True) published = columns.DateTime(primary_key=True, clustering_order="DESC") title = columns.Text(required=True) author = columns.Text(required=True) body = columns.Text(required=True) thumb = columns.Bytes(required=False)`

when I python manage.py runserver OR sync_cassandra I get the following error:

`Traceback (most recent call last): File "/usr/local/lib/python3.5/dist-packages/django_cassandra_engine/models/init.py", line 848, in _get_explicit_pk_column pk_field = cls.Meta.get_pk_field AttributeError: type object 'Article' has no attribute 'Meta'

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "manage.py", line 15, in execute_from_command_line(sys.argv) File "/home/shine/.local/lib/python3.5/site-packages/django/core/management/init.py", line 371, in execute_from_command_line utility.execute() File "/home/shine/.local/lib/python3.5/site-packages/django/core/management/init.py", line 347, in execute django.setup() File "/home/shine/.local/lib/python3.5/site-packages/django/init.py", line 24, in setup apps.populate(settings.INSTALLED_APPS) File "/home/shine/.local/lib/python3.5/site-packages/django/apps/registry.py", line 112, in populate app_config.import_models() File "/home/shine/.local/lib/python3.5/site-packages/django/apps/config.py", line 198, in import_models self.models_module = import_module(models_module_name) File "/usr/lib/python3.5/importlib/init.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "", line 986, in _gcd_import File "", line 969, in _find_and_load File "", line 958, in _find_and_load_unlocked File "", line 673, in _load_unlocked File "", line 665, in exec_module File "", line 222, in _call_with_frames_removed File "/home/shine/cs/coinsector/articles/models.py", line 9, in class Article(DjangoCassandraModel): File "/usr/local/lib/python3.5/dist-packages/django_cassandra_engine/models/init.py", line 448, in new name=name File "/usr/local/lib/python3.5/dist-packages/django_cassandra_engine/models/init.py", line 505, in _add_django_meta_and_register_model '_meta', DjangoCassandraOptions(meta, app_label, cls=new_class)) File "/usr/local/lib/python3.5/dist-packages/django_cassandra_engine/models/init.py", line 60, in init self.setup_pk() File "/usr/local/lib/python3.5/dist-packages/django_cassandra_engine/models/init.py", line 78, in setup_pk self.pk = self.model_inst._get_explicit_pk_column() File "/usr/local/lib/python3.5/dist-packages/django_cassandra_engine/models/init.py", line 850, in _get_explicit_pk_column raise RuntimeError(PK_META_MISSING_HELP.format(cls)) RuntimeError: On Django Cassandra Models with more than one primary_key field, The model <class 'articles.models.Article'> must specify class Meta attribute 'get_pk_field'. E.g. class Meta: get_pk_field='id' So that Django knows which primary key field to use in queryies such as Model.objects.get(pk=123) ` Any assistance would be very much appreciated! Thanks!

bicepjai commented 4 years ago

Did you get a solution for this ?

caniko commented 2 years ago

This is also a little counterintuitive, considering that Cassandra should accept multiple primary keys. This be solved intrinsically, right?