Accessing ‘self.user’ or ‘self.user_id’ in Django model’s clean() method

  Kiến thức lập trình

I need to know if this is possible in a model’s clean or save method (ideally clean), without using forms, as I want specific validation logic to be directly tied to the model so that both forms and manager commands (e.g., Model.objects.create() in shell or views) are validated equally.

I have ModelB where user is a foreign key of ModelA.
I then have a view where a form for ModelB is validated before ModelB is created:

if form.is_valid():
    form.save()

As we all know, form.is_valid() calls model.clean() via self.instance.full_clean(). , and I’m looking to validate something about self.user under the clean() method of ModelB. However, in this Model B clean method, self.user produces:

raise self.RelatedObjectDoesNotExist(
models.ModelB.user.RelatedObjectDoesNotExist: ModelB has no user.

and self.user_id returns None.


Essentially, is it possible to reference self.user or self.user_id in ModelB‘s clean method, or must it go in its save method?

Theme wordpress giá rẻ Theme wordpress giá rẻ Thiết kế website

LEAVE A COMMENT