Opened 3 months ago

Last modified 3 months ago

#35694 closed Cleanup/optimization

FK inconsistency beween `get_or_create` and any other orm function — at Initial Version

Reported by: KIC Owned by:
Component: Database layer (models, ORM) Version: 5.1
Severity: Normal Keywords:
Cc: Triage Stage: Unreviewed
Has patch: no Needs documentation: no
Needs tests: no Patch needs improvement: no
Easy pickings: no UI/UX: no

Description

While any orm filter, get, ... accepts a pk or instance get_or_create does not. For consistency get_or_create should also be able to handle instances and pk's interchangeably.

models.py:
`
from django.db import models

class A(models.Model):

foo = models.CharField(max_length=100)

class B(models.Model):

a = models.ForeignKey(A, on_delete=models.CASCADE)
bar = models.CharField(max_length=100)

`

tests.py
`
from testing.utils import TestCase
from zfoo import models

class TestSomething(TestCase):

def test_lala(self):

a = models.A.objects.create(foo="foo")
models.B.objects.create(a=a, bar="bar")

self.assertEqual(models.B.objects.get(a=a), models.B.objects.get(a=a.pk))
self.assertEqual(

models.B.objects.filter(a=a).first(),
models.B.objects.filter(a=a.pk).first(),

)

models.B.objects.get_or_create(dict(bar="does not exist"), bar="baz", a=a)
models.B.objects.get_or_create(dict(bar="does not exist"), bar="baz", a=a.pk) # FAILS

`

Change History (0)

Note: See TracTickets for help on using tickets.
Back to Top