graphql-python / graphene-sqlalchemy

Graphene SQLAlchemy integration
http://docs.graphene-python.org/projects/sqlalchemy/en/latest/
MIT License
980 stars 226 forks source link

Relationship isn't working if a model has a property named other than 'id'. #392

Open masterchef opened 1 year ago

masterchef commented 1 year ago
class BusinessPriority(client.Model):
   metric_views: List['MetricView'] = orm.relationship('MetricView', secondary='business_priority_metrics_link')

class MetricView(client.Model):
    """Data around metric view for Ops Insight"""
    __tablename__ = 'metric_view'

    row_id: Union[Column, int] = Column(name='id', type_=BigInteger, primary_key=True, autoincrement=True)

I get

"errors": [
    {
      "message": "type object 'MetricView' has no attribute 'id'",
      "locations": [
        {
          "line": 8,
          "column": 9
        }
      ],
      "path": [
        "allBusinessPriorities",
        "edges",
        0,
        "node",
        "metricViews"
      ]
    },

But if I change

row_id: Union[Column, int] = Column(name='id', type_=BigInteger, primary_key=True, autoincrement=True)
to
id: Union[Column, int] = Column(name='id', type_=BigInteger, primary_key=True, autoincrement=True)

The join and query works well.

palisadoes commented 1 year ago

This should have been fixed in this PR. Beware that the syntax for filtering has changed to match that used by Dgraph.

masterchef commented 1 year ago

Ugh I'm still on version 2.3.0 because we can't use beta versions in our company. When is the v3 planned for GA?

palisadoes commented 1 year ago

As soon as the filters are done. They are in the final stages of testing. A month or two.

I'm testing the beta with a DB column named id but aliased to id_

masterchef commented 1 year ago

Thank you! Looking forward to taking advantage of it!

erikwrede commented 10 months ago

Hey @masterchef, we have a release candidate out now https://github.com/graphql-python/graphene-sqlalchemy/releases/tag/v3.0.0rc1

We'd appreciate any feedback before the full release!