mirror of
https://github.com/graphql-python/graphene-django.git
synced 2024-11-21 09:06:57 +03:00
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:
parent
ea45de02ad
commit
6f21dc7a94
|
@ -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")
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue
Block a user