ManyToManyField Hook HELP!
Closed this issue · 0 comments
aybasaran commented
class Destination(LifecycleModelMixin, models.Model):
name = models.CharField(max_length=255)
slug = AutoSlugField(populate_from="name", unique=True)
image = models.ImageField(upload_to="destination", blank=True, null=True)
region = models.ForeignKey(Region, on_delete=models.CASCADE, blank=True, null=True)
blog = models.ForeignKey(BlogEntry, on_delete=models.CASCADE, blank=True, null=True)
latitude = models.FloatField(blank=True, null=True)
longitude = models.FloatField(blank=True, null=True)
is_active = models.BooleanField(default=True)
is_popular = models.BooleanField(default=False)
order = models.PositiveIntegerField(default=1)
def __str__(self):
return self.name
class Meta:
ordering = ("order",)
verbose_name_plural = "Destinations"
@hook(AFTER_UPDATE)
def after_update(self):
if self.image.url.endswith((".jpg", ".jpeg", ".png")):
convert_to_webp(self, "destination", f"{slugify(self.name)}")
class TourDestinationRoutes(LifecycleModelMixin, models.Model):
destination = models.ForeignKey(Destination, on_delete=models.CASCADE)
tour = models.ForeignKey("api.Tour", on_delete=models.CASCADE)
order = models.PositiveIntegerField(default=1)
@hook(AFTER_UPDATE, when="order", has_changed=True)
def route_order_changed(self):
print("route order changed")
class Meta:
ordering = ("order",)
verbose_name_plural = "Tour Destination Routes"
def __str__(self):
return f"{self.tour.title} - {self.destination.name}"
class Tour(LifecycleModelMixin, models.Model):
category = models.ForeignKey(TourCategory, on_delete=models.CASCADE)
title = models.CharField(max_length=255)
short_overview = models.TextField(verbose_name="This will be shown on the home page card.")
image = models.ImageField(upload_to="tour")
tour_map = models.ImageField(upload_to="tour_map", blank=True, null=True)
tour_map_thumbnail = models.ImageField(upload_to="tour_map/thumbnail", blank=True, null=True)
html_title = models.CharField(max_length=255, blank=True, null=True)
html_description = models.TextField(blank=True, null=True)
html_keywords = models.TextField(blank=True, null=True)
is_active = models.BooleanField(default=True)
is_popular = models.BooleanField(default=False)
order = models.PositiveIntegerField(default=1)
similar_tours = models.ManyToManyField("self", blank=True)
travel_styles = models.ManyToManyField(TravelStyle, blank=True)
destinations = models.ManyToManyField(
Destination,
through=TourDestinationRoutes,
through_fields=(
"tour",
"destination",
),
blank=True,
)
def __str__(self):
return self.title
@hook(AFTER_UPDATE)
def after_update(self):
if self.image.url.endswith((".jpg", ".jpeg", ".png")):
convert_to_webp(self, "tour", f"{slugify(self.title)}")
Hi everyone, Hope u all well.
I should consider if there is any trick for ManyToManyField. I want to watch TourDestinationRoutes's order changes
if I put the AFTER_UPDATE hook to TourDestinationRoutes it triggers many times because sortable-admin changes all route object's order