ok Derek i used save() instead of return and it works now 
thank you very much 
@receiver(post_save, sender=Match)
def update_club_score(instance, sender, **kwargs):
# club local won
if instance.score_local > instance.score_visitor:
instance.club_local.won += 1
instance.club_local.save()
instance.club_visitor.lost += 1
instance.club_visitor.save()
# club local lost
if instance.score_local < instance.score_visitor:
instance.club_local.lost += 1
instance.club_local.save()
instance.club_visitor.won += 1
instance.club_visitor.save()
# draw
if instance.score_local == instance.score_visitor:
instance.club_local.draw += 1
instance.club_local.save()
instance.club_visitor.draw += 1
instance.club_visitor.save()


On Wednesday, April 24, 2019 at 8:13:05 AM UTC+2, Derek wrote:
>
> Did you add the required decorator before this function?  (The function is 
> not part of the class; its a standalone appearing in the same module.)
>
> Also, you generally don't put returns in the post_save function: but you 
> do need to call save() on the model instance.
>
> Another example here:
>
> https://stackoverflow.com/questions/13014411/django-post-save-signal-implementation
>
> On Tuesday, 23 April 2019 16:31:43 UTC+2, omar ahmed wrote:
>>
>> yes i studied this tutorial before and i added this function to "Club" 
>> class (( Receiver function class )) but it does not affect fields 
>> def teampoints( sender, instance, **kwargs):
>> if instance.score_local > instance.score_visitor:
>> return instance.club_local.won +1 and instance.club_visitor.lost + 1
>> elif instance.score_local < instance.score_visitor:
>> return instance.club_local.lost + 1 and instance.club_visitor.won + 1
>> else:
>> return instance.club_local.draw + 1 and instance.club_visitor.draw + 1
>>
>>
>> On Tuesday, April 23, 2019 at 3:27:28 PM UTC+2, Derek wrote:
>>>
>>> You need to use Django signals to provide a custom "post_save".  There 
>>> is a good tutorial here:
>>>
>>> https://simpleisbetterthancomplex.com/tutorial/2016/07/28/how-to-create-django-signals.html
>>>
>>>
>>> On Monday, 22 April 2019 16:22:19 UTC+2, omar ahmed wrote:
>>>>
>>>> i put this function in "Match" class :
>>>> def points(self):
>>>> if self.score_local > self.score_visitor:
>>>> return (self.club_local.won)+1 and (self.club_visitor.lost)+1
>>>> elif self.score_local < self.score_visitor:
>>>> return (self.club_local.lost)+1 and (self.club_visitor.won)+1
>>>> else:
>>>> return (self.club_local.draw)+1 and (self.club_visitor.draw)+1
>>>> and i want it to update fields and 'CalcPoints' function in "Club" 
>>>> class 
>>>> class Club(models.Model):
>>>> ...
>>>> def CalcPoints(self):
>>>> return self.won*3 + self.draw
>>>>
>>>> but until now it does not update objects (( how can i use post_save 
>>>> here )) 
>>>>
>>>> On Saturday, April 20, 2019 at 9:09:01 AM UTC+2, Derek wrote:
>>>>>
>>>>> That should just require a basic if/then logic test; "get" the correct 
>>>>> Club object, update the win/loss field and save the Club. Repeat for both 
>>>>> Clubs.
>>>>>
>>>>> On Thursday, 18 April 2019 14:09:41 UTC+2, omar ahmed wrote:
>>>>>>
>>>>>> thank you for response , derek
>>>>>> but how can i increment 'win' 'lost' or 'draw' Club fields by 
>>>>>> 'winner' Match field
>>>>>>
>>>>>> On Wednesday, April 17, 2019 at 3:26:22 PM UTC+2, Derek wrote:
>>>>>>>
>>>>>>> 1. Add a "winner" field to your Match
>>>>>>> 2. Implement a post_save  signal for the Match model that updates 
>>>>>>> the "won" or "lost" fields for each Club in the match (simple if/then 
>>>>>>> logic 
>>>>>>> based on winner).
>>>>>>>
>>>>>>> PS I think the default values for "won" and "lost" for a Club should 
>>>>>>> be "0" and not "1".
>>>>>>>
>>>>>>> On Tuesday, 16 April 2019 20:19:34 UTC+2, omar ahmed wrote:
>>>>>>>>
>>>>>>>> hello ... i have two models "Club" class and "Match" class and it 
>>>>>>>> has foreign key to Club
>>>>>>>> now i want to increment "won" field (or draw or lost) in "Club" 
>>>>>>>> class by "score_local" and "score_visitor" in "Match" class ..
>>>>>>>> how can i do this
>>>>>>>> class Club(models.Model):
>>>>>>>> name = models.CharField(max_length=100)
>>>>>>>> won = models.IntegerField(default=1)
>>>>>>>> draw = models.IntegerField(default=1)
>>>>>>>> lost = models.IntegerField()
>>>>>>>> goal_for = models.IntegerField()
>>>>>>>> goal_against = models.IntegerField()
>>>>>>>>
>>>>>>>>
>>>>>>>> class Match(models.Model):
>>>>>>>> play_date = models.DateTimeField('play date')
>>>>>>>> club_visitor = models.ForeignKey(Club, on_delete=models.CASCADE, 
>>>>>>>> related_name='match_club_visitor')
>>>>>>>> club_local = models.ForeignKey(Club, on_delete=models.CASCADE, 
>>>>>>>> related_name='match_club_local')
>>>>>>>> score_visitor = models.IntegerField()
>>>>>>>> score_local = models.IntegerField()
>>>>>>>>
>>>>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/a9b92a46-a012-46e9-8717-c1e91e07870c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to