2

Voici mes modèles:django repos framwork - Supprimer l'objet, ses champs de ManyToMany et des objets avec des clés étrangères à ce

class Ride(models.Model): 
    driver = models.ForeignKey('auth.User', related_name='rides_as_driver') 
    destination = models.CharField(max_length=100, default='') 
    leaving_time=models.TimeField() 
    leaving_date=models.DateField(default=datetime.date.today) 
    num_of_spots=models.IntegerField() 
    passengers=models.ManyToManyField('auth.User', related_name="rides_as_passenger") 
    mid_destinations = models.CharField(max_length=100, default='') 


class PendingRequest(models.Model): 
    driver = models.ForeignKey('auth.User', related_name='driver_pending_requests') 
    passenger = models.ForeignKey('auth.User', related_name='passenger_pending_requests') 
    ride = models.ForeignKey(Ride) 

Comme vous pouvez le voir - j'ai un tour modèle avec ManyToMany champ auth.user (passagers), ForeginKey à auth.user (pilote), et également un modèle PendingRequest qui a un champ de ForeginKeyRail .

Maintenant, je veux pouvoir supprimer un objet Ride, avoir un code personnalisé après la suppression, et m'assurer que les autres modèles se mettent à jour en conséquence.

Par exemple, si je supprime un tour -> Je veux avoir un code personnalisé (envoyer une notification aux passagers) -> et puis supprimez les entrées de la table des passagers qui ont id tour supprimé dans leur ride champ, et également les PendingRequest entrées qui ont le supprimé ride id.

Comment dois-je procéder?

Répondre

0

Tout ce que vous décrivez la logique métier. Vous devriez avoir une fonction pour cela, remplacer le membre destroy - si vous utilisez ViewSet - et appelez la fonction métier à partir de celui-ci.

Modifier: corrigé supprimer pour détruire.

destroy signature est: destroy(self, request, *args, **kwargs):

+0

merci. le nom de la méthode de suppression à remplacer est juste 'def delete'? –

+0

Mon mal, c'est détruire. Modification de la réponse – Linovia

+0

merci. une chose bizarre qui se passe est, sans le dépassement - quand je fais EFFACER manèges/139/je reçois une réponse non trouvée 404. Je vérifie dans la base de données et il y a un tour avec l'ID de 139. pourquoi est-ce? –