Django model is saved, but returns None

I have a simple model with Model Manager:

class CompanyReviewManager(models.Manager): def get_votes_for_company(self, company): try: return CompanyReview.objects.filter(user = user).count() except ObjectDoesNotExist: return None def get_rating_for_field(self, installer, field): try: return CompanyReview.objects.filter(user = user).aggregate(Avg(field)) except ObjectDoesNotExist: return None class CompanyReview(models.Model): user = models.ForeignKey(settings.AUTH_USER_MODEL) satisfaction = models.PositiveSmallIntegerField(blank = True, null = True,) comments = models.TextField(blank = True, null = True,) objects = CompanyReviewManager() def save(self, *args, **kwargs): obj = super(InstallerReview, self).save(*args, **kwargs) return obj 

When I try to save an object in a Django shell, the object will be saved, but nothing will be returned. Why?

 In [1]: company_obj = InstallerReview() In [2]: company_obj.user = CompanyUser.objects.all()[2] In [3]: obj = company_obj.save() In [4]: obj Out[4]: In [5]: company_obj Out[5]: <CompanyReview: AdminCompany> 

Why does the 3rd step end without errors?

+4
source share
1 answer

Because the super class save method returns nothing. It does not need to: self saved, there is no point in returning something else and invoking its obj .

You can just return self from your save subclass, but not so much. Typically, in Python, if functions change objects in place, they do not return the changed object: compare with the list sort() method.

+19
source

Source: https://habr.com/ru/post/1480135/


All Articles