mardi 12 janvier 2021

Enforce or test on_delete behavior of all ForeignKey fields using a specific model

Let's say I have a proxy user model as

class UserWithProfile(User):
    profile_description = models.TextField()

    class Meta:
        proxy = True
        ordering = ('first_name', )

I want to make certain that all data which could in the future be associated with a UserWithProfile entry is deleted when this profile is deleted. In other words I want to guarantee the on_delete behavior of all existing and future ForeignKey fields referencing this model.

How would one implement either a test checking this, or raise an error when another on_delete behavior is implemented?

I know it would be possible to make a custom ForeignKey class, which is what I will be probably doing, ...

class UserWithProfileField(models.ForeignKey):
    def __init__(self, *args, **kwargs):
        kwargs.setdefault('to', UserWithProfile)
        kwargs.setdefault('on_delete', models.CASCADE)
        super().__init__(*args, **kwargs)

... however that couldn't stop future users from using the ForeignKey class with a different on_delete behavior.

Aucun commentaire:

Enregistrer un commentaire