exclude through models
This commit is contained in:
@ -168,7 +168,7 @@ By default `Through` model relation names default to related model name in lower
|
||||
|
||||
So in example like this:
|
||||
```python
|
||||
... # course declaration ommited
|
||||
... # course declaration omitted
|
||||
class Student(ormar.Model):
|
||||
class Meta:
|
||||
database = database
|
||||
|
||||
@ -217,7 +217,11 @@ class ModelRow(NewBaseModel):
|
||||
used_prefixes=used_prefixes,
|
||||
)
|
||||
item[model_cls.get_column_name_from_alias(related)] = child
|
||||
if field.is_multi and child:
|
||||
if (
|
||||
field.is_multi
|
||||
and child
|
||||
and not model_excludable.is_excluded(field.through.get_name())
|
||||
):
|
||||
cls._populate_through_instance(
|
||||
row=row,
|
||||
item=item,
|
||||
|
||||
@ -230,3 +230,58 @@ async def test_selecting_subset():
|
||||
await Car.objects.select_related("manufacturer").fields(
|
||||
["id", "name", "manufacturer__founded"]
|
||||
).all()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_selecting_subset_of_through_model():
|
||||
async with database:
|
||||
car = (
|
||||
await Car.objects.select_related(["manufacturer__hq__nicks"])
|
||||
.fields(
|
||||
{
|
||||
"id": ...,
|
||||
"name": ...,
|
||||
"manufacturer": {
|
||||
"name": ...,
|
||||
"hq": {"name": ..., "nicks": {"name": ...}},
|
||||
},
|
||||
}
|
||||
)
|
||||
.exclude_fields("manufacturer__hq__nickshq")
|
||||
.get()
|
||||
)
|
||||
assert car.manufacturer.hq.nicks[0].nickshq is None
|
||||
|
||||
car = (
|
||||
await Car.objects.select_related(["manufacturer__hq__nicks"])
|
||||
.fields(
|
||||
{
|
||||
"id": ...,
|
||||
"name": ...,
|
||||
"manufacturer": {
|
||||
"name": ...,
|
||||
"hq": {"name": ..., "nicks": {"name": ...}},
|
||||
},
|
||||
}
|
||||
)
|
||||
.exclude_fields({"manufacturer": {"hq": {"nickshq": ...}}})
|
||||
.get()
|
||||
)
|
||||
assert car.manufacturer.hq.nicks[0].nickshq is None
|
||||
|
||||
car = (
|
||||
await Car.objects.select_related(["manufacturer__hq__nicks"])
|
||||
.fields(
|
||||
{
|
||||
"id": ...,
|
||||
"name": ...,
|
||||
"manufacturer": {
|
||||
"name": ...,
|
||||
"hq": {"name": ..., "nicks": {"name": ...}},
|
||||
},
|
||||
}
|
||||
)
|
||||
.exclude_fields("manufacturer__hq__nickshq__nick")
|
||||
.get()
|
||||
)
|
||||
assert car.manufacturer.hq.nicks[0].nickshq is not None
|
||||
|
||||
@ -261,7 +261,8 @@ async def test_nested_m2m_values_subset_of_fields():
|
||||
user = (
|
||||
await Role.objects.select_related("users__categories")
|
||||
.filter(name="admin")
|
||||
.fields({"name": ..., "users": {"name": ...}})
|
||||
.fields({"name": ..., "users": {"name": ..., "categories": {"name"}}})
|
||||
.exclude_fields("users__roleuser")
|
||||
.values()
|
||||
)
|
||||
assert user == [
|
||||
|
||||
Reference in New Issue
Block a user