Not require explicitly set ordering in DjangoConnectionField (#1518)

* Revert "feat!: check django model has a default ordering when used in a relay connection (#1495)"

This reverts commit 96c09ac439.

* Fix assert no warning for pytest>=8
This commit is contained in:
Kien Dang 2024-04-18 12:00:31 +08:00 committed by GitHub
parent ea45de02ad
commit 6f21dc7a94
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 3 additions and 59 deletions

View File

@ -24,9 +24,6 @@ class Faction(models.Model):
class Ship(models.Model):
class Meta:
ordering = ["pk"]
name = models.CharField(max_length=50)
faction = models.ForeignKey(Faction, on_delete=models.CASCADE, related_name="ships")

View File

@ -101,19 +101,13 @@ class DjangoConnectionField(ConnectionField):
non_null = True
assert issubclass(
_type, DjangoObjectType
), "DjangoConnectionField only accepts DjangoObjectType types as underlying type"
), "DjangoConnectionField only accepts DjangoObjectType types"
assert _type._meta.connection, "The type {} doesn't have a connection".format(
_type.__name__
)
connection_type = _type._meta.connection
if non_null:
return NonNull(connection_type)
# Since Relay Connections require to have a predictible ordering for pagination,
# check on init that the Django model provided has a default ordering declared.
model = connection_type._meta.node._meta.model
assert (
len(getattr(model._meta, "ordering", [])) > 0
), f"Django model {model._meta.app_label}.{model.__name__} has to have a default ordering to be used in a Connection."
return connection_type
@property

View File

@ -26,9 +26,6 @@ else:
class Event(models.Model):
class Meta:
ordering = ["pk"]
name = models.CharField(max_length=50)
tags = ArrayField(models.CharField(max_length=50))
tag_ids = ArrayField(models.IntegerField())

View File

@ -5,9 +5,6 @@ CHOICES = ((1, "this"), (2, _("that")))
class Person(models.Model):
class Meta:
ordering = ["pk"]
name = models.CharField(max_length=30)
parent = models.ForeignKey(
"self", on_delete=models.CASCADE, null=True, blank=True, related_name="children"
@ -15,9 +12,6 @@ class Person(models.Model):
class Pet(models.Model):
class Meta:
ordering = ["pk"]
name = models.CharField(max_length=30)
age = models.PositiveIntegerField()
owner = models.ForeignKey(
@ -37,9 +31,6 @@ class FilmDetails(models.Model):
class Film(models.Model):
class Meta:
ordering = ["pk"]
genre = models.CharField(
max_length=2,
help_text="Genre",
@ -55,9 +46,6 @@ class DoeReporterManager(models.Manager):
class Reporter(models.Model):
class Meta:
ordering = ["pk"]
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
email = models.EmailField()

View File

@ -2,12 +2,11 @@ import datetime
import re
import pytest
from django.db.models import Count, Model, Prefetch
from django.db.models import Count, Prefetch
from graphene import List, NonNull, ObjectType, Schema, String
from graphene.relay import Node
from ..fields import DjangoConnectionField, DjangoListField
from ..fields import DjangoListField
from ..types import DjangoObjectType
from .models import (
Article as ArticleModel,
@ -717,34 +716,3 @@ class TestDjangoListField:
r'SELECT .* FROM "tests_film" INNER JOIN "tests_film_reporters" .* LEFT OUTER JOIN "tests_filmdetails"',
captured.captured_queries[1]["sql"],
)
class TestDjangoConnectionField:
def test_model_ordering_assertion(self):
class Chaos(Model):
class Meta:
app_label = "test"
class ChaosType(DjangoObjectType):
class Meta:
model = Chaos
interfaces = (Node,)
class Query(ObjectType):
chaos = DjangoConnectionField(ChaosType)
with pytest.raises(
TypeError,
match=r"Django model test\.Chaos has to have a default ordering to be used in a Connection\.",
):
Schema(query=Query)
def test_only_django_object_types(self):
class Query(ObjectType):
something = DjangoConnectionField(String)
with pytest.raises(
TypeError,
match="DjangoConnectionField only accepts DjangoObjectType types as underlying type",
):
Schema(query=Query)