mirror of
https://github.com/davidhalter/django-stubs.git
synced 2025-12-07 12:44:29 +08:00
look for models.Model in full mro for to= parameter
This commit is contained in:
@@ -48,10 +48,7 @@ def get_valid_to_value_or_none(ctx: FunctionContext) -> Optional[Instance]:
|
|||||||
referred_to_type = arg_type.ret_type
|
referred_to_type = arg_type.ret_type
|
||||||
if not isinstance(referred_to_type, Instance):
|
if not isinstance(referred_to_type, Instance):
|
||||||
return None
|
return None
|
||||||
for base in referred_to_type.type.bases:
|
if not referred_to_type.type.has_base(helpers.MODEL_CLASS_FULLNAME):
|
||||||
if base.type.fullname() == helpers.MODEL_CLASS_FULLNAME:
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
ctx.api.msg.fail(f'to= parameter value must be '
|
ctx.api.msg.fail(f'to= parameter value must be '
|
||||||
f'a subclass of {helpers.MODEL_CLASS_FULLNAME}',
|
f'a subclass of {helpers.MODEL_CLASS_FULLNAME}',
|
||||||
context=ctx.context)
|
context=ctx.context)
|
||||||
|
|||||||
@@ -228,3 +228,14 @@ class User(models.Model):
|
|||||||
friends = models.ManyToManyField('self', on_delete=models.CASCADE)
|
friends = models.ManyToManyField('self', on_delete=models.CASCADE)
|
||||||
reveal_type(User().friends) # E: Revealed type is 'django.db.models.manager.RelatedManager[main.User*]'
|
reveal_type(User().friends) # E: Revealed type is 'django.db.models.manager.RelatedManager[main.User*]'
|
||||||
[out]
|
[out]
|
||||||
|
|
||||||
|
[CASE recursively_checking_for_base_model_in_to_parameter]
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
class BaseModel(models.Model):
|
||||||
|
pass
|
||||||
|
class ParkingSpot(BaseModel):
|
||||||
|
pass
|
||||||
|
class Booking(BaseModel):
|
||||||
|
parking_spot = models.ForeignKey(to=ParkingSpot, null=True, on_delete=models.SET_NULL)
|
||||||
|
[out]
|
||||||
|
|||||||
Reference in New Issue
Block a user