graphql-python / graphene-django

Build powerful, efficient, and flexible GraphQL APIs with seamless Django integration.
http://docs.graphene-python.org/projects/django/en/latest/
MIT License
4.28k stars 766 forks source link

Support Django 5 GeneratedField #1494

Open KianChavoshiNejad opened 7 months ago

KianChavoshiNejad commented 7 months ago

Note: for support questions, please use stackoverflow. This repository's issues are reserved for feature requests and bug reports.

I used Django 5's GenerativeField to define one of my fields

quantity = models.PositiveIntegerField()

unit_price = models.DecimalField(
        max_digits=12,
        decimal_places=2,
        null=True,
        blank=True,
    )

total_price = models.GeneratedField(
        expression=models.F("quantity") * models.F("unit_price"),
        output_field=models.DecimalField(
            max_digits=12,
            decimal_places=2,
        ),
        db_persist=True,
        null=True,
        blank=True,
    )

When I try to pass the value through theDjangoObjectType, I received the following error:

Exception: Don't know how to convert the Django field ModelName.total_price (<class 'django.db.models.fields.generated.GeneratedField'>)

  1. Create a model with a GeneratedField
  2. Create a DjangoObjectType for the model created in step 1
  3. Error will appear when trying to query the generated field in GraphQL
cmhac commented 1 month ago

Also running into a use case for this in a project I'm working on

andrewcole commented 1 week ago

I don't know what I'm doing, but the following code worked for me

from django.contrib.gis.db import models

from graphene_django.converter import convert_django_field

@convert_django_field.register(models.GeneratedField)
def convert_generated_field(field, registry=None):
    convert_django_field.dispatch(field.output_field.__class__)