18👍
This can be done in Django, but you will need to restructure your models a little bit differently:
class Product(models.Model):
name = models.CharField(max_length=50)
product_rank = models.OneToOneField('ProductRank')
class ProductRank(models.Model):
rank = models.IntegerField(default=0)
Now, when fetching Product objects, you can following the one-to-one relationship in one query using the select_related() method:
Product.objects.filter([...]).select_related()
This will produce one query that fetches product ranks using a join:
SELECT "example_product"."id", "example_product"."name", "example_product"."product_rank_id", "example_productrank"."id", "example_productrank"."rank" FROM "example_product" INNER JOIN "example_productrank" ON ("example_product"."product_rank_id" = "example_productrank"."id")
I had to move the relationship field between Product and ProductRank to the Product model because it looks like select_related() follows foreign keys in one direction only.
7👍
I haven’t checked but:
products = Product.objects.filter(categories__pk=1).select_related()
Should grab every instance.
- Django model inheritance and type check
- TeamCity for Python/Django continuous integration
- Django Rest Framework – Post Foreign Key
- How to limit number of records in Django Rest Framework reverse relations
- How do you update a django template context variable after an AJAX call?
2👍
Add a call to the QuerySet
‘s select_related()
method, though I’m not positive that grabs references in both directions, it is the most likely answer.
2👍
For Django 2.1
From documentation
This example retrieves all Entry objects with a Blog whose name is ‘Beatles Blog’:
Entry.objects.filter(blog__name='Beatles Blog')
Doc URL
https://docs.djangoproject.com/en/2.1/topics/db/queries/
- Heroku/python failed to detect set buildpack
- Enforce at least one value in a many-to-many relation, in Django?