Opened 7 years ago
Closed 7 years ago
#29148 closed New feature (fixed)
Explain how to use QuerySet.get_or_create() with Q objects
Reported by: | Mike Lissner | Owned by: | Dhruv Singh |
---|---|---|---|
Component: | Documentation | Version: | 2.0 |
Severity: | Normal | Keywords: | |
Cc: | Dhruv Singh, Herbert Fortes | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | yes |
Easy pickings: | yes | UI/UX: | no |
Description (last modified by )
This technique is useful if you want to use Q objects in conjunction with the get or create method, and it's documented in a few places around the web.
I brought this up in the forums yesterday and somebody suggested that it be documented:
I gave this a try, but I don't understand the documentation system and I sadly don't have time to figure it out. Seems though like a change could go here:
https://github.com/django/django/blob/master/docs/ref/models/querysets.txt#L1886
I think something along the lines of:
get_or_create() can be used with Q objects by chaining them together like so:
An example
When this is done, the logic performs as above, but matches are made according to the query in the Q object.
I imagine this also works for update_or_create, but I'm not sure how to document that too. Maybe just a quick mention:
update_or_create() can be used with Q objects using the same technique as documented above for get_or_create()
Change History (8)
comment:1 by , 7 years ago
Description: | modified (diff) |
---|---|
Summary: | Add filter().get_or_create() chaining to documentation to explain how to use get_or_create with Q objects → Explain how to use QuerySet.get_or_create() with Q objects |
Triage Stage: | Unreviewed → Accepted |
comment:2 by , 7 years ago
Cc: | added |
---|---|
Owner: | changed from | to
Status: | new → assigned |
comment:3 by , 7 years ago
I think a good place to put an example is on 'Complex lookups with Q objects' .
There has explanation on how use it with "...lookup functions that takes keyword-arguments (e.g. filter(), exclude(), get())..."
comment:4 by , 7 years ago
Cc: | added |
---|
comment:5 by , 7 years ago
Hi Dhruv Singh,
Do you still intent to make a PR to close the ticket?
I have something like this:
Differently from :meth:~django.db.models.query.QuerySet.get
method, the
:meth:~django.db.models.query.QuerySet.get_or_create
method must be used
with the :meth:~django.db.models.query.QuerySet.filter
lookup function.
For example::
Poll.objects.filter(
Q(first_name='Bryan') | Q(first_name='Bruce')
).get_or_create({'last_name': 'Harrison'})
comment:7 by , 7 years ago
Patch needs improvement: | set |
---|
Trying to start to give my bit to the open source community.
This feels like a good small starting step.
As the description of the ticket suggests, will add an example of using Q objects with get_or_create().
Please suggest if something else is needed.