Django 仅内部使用模型的模型验证

Django 仅内部使用模型的模型验证,django,django-models,django-orm,Django,Django Models,Django Orm,我有一个仅由python在视图中内部使用的模型。没有涉及任何形式。看起来像这样 class ShareLink(models.Model): from_share = models.ForeignKey(Share, on_delete=models.CASCADE, related_name='from_share') to_share = models.ForeignKey(Share, on_delete=models.CASCADE, related_name='to_

我有一个仅由python在视图中内部使用的模型。没有涉及任何形式。看起来像这样

class ShareLink(models.Model):

    from_share = models.ForeignKey(Share, on_delete=models.CASCADE, related_name='from_share')
    to_share = models.ForeignKey(Share, on_delete=models.CASCADE, related_name='to_share')

    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    creator = models.ForeignKey(settings.AUTH_USER_MODEL)
    active = models.BooleanField(default=True)

    mode = models.PositiveSmallIntegerField(choices=SHARE_LINK_MODE_CHOICES, default=1)

    class Meta:

        unique_together = ('from_share', 'to_share', 'mode', 'active')

    def clean(self):
        ret = super(ShareLink, self).clean()
        return ret

根据柱模式,我有一些限制。创造者必须是来自共享的创造者等等。所以基本上在模型的clean()中应该做什么。但只有在涉及模型表单时才调用此函数。但我没有,因为这个模型只在内部使用。验证我的模型的最佳方法是什么?任何建议

在模型中实现
clean()
方法后,您可以在保存实例之前调用视图中的
full\u clean()
方法来执行验证(请参阅):


如果我理解正确的话,那么您将在python代码中创建ShareLink的实例?或者你说的“内部”是什么意思?是的,只有在我使用.objects.create(..)创建新对象的大多数时候,才在视图中使用。我阅读了另一个建议,即使用类似Mixin的类ShareLink(ValidatorMixin,models.Model):然后覆盖这个Mixin中的save方法。但评论指出,这可能会造成问题。使用objects.create(…)的方法似乎有点争议。
sharelink = ShareLink()
try:
    sharelink.full_clean()
except ValidationError as e:
    # Do something based on the errors contained in e.message_dict.
    # Display them to a user, or handle them programmatically.
    pass
sharelink.save()