Ich versuche ein Geofencing für eine Flotte von LKWs zu implementieren. Ich muss einem Fahrzeug eine Liste von Grenzen zuordnen. Darüber hinaus ist eine der Voraussetzungen, alles zu behalten, auch wenn es zu Prüfzwecken gelöscht wird. Daher müssen wir Soft Delete für alles implementieren. Hier liegt das Problem. Mein Viele-zu-viele-Feld entspricht nicht dem Soft-Lösch-Manager, es enthält sowohl die aktiven als auch die inaktiven Datensätze im Such-Dataset.Wie wird gefiltert? Modell eines Viele-zu-Viele-Feldes?
class Vehicle(SoftDeleteModel):
routes = models.ManyToManyField('RouteBoundary', through='VehicleBoundaryMap', verbose_name=_('routes'),
limit_choices_to={'active': True})
class VehicleBoundaryMap(SoftDeleteModel):
vehicle = models.ForeignKey(Vehicle, verbose_name="vehicle")
route_boundary = models.ForeignKey(RouteBoundary, verbose_name="route boundary")
# ... more stuff here
alive = SoftDeleteManager()
class SoftDeleteManager(models.Manager):
use_for_related_fields = True
def get_queryset(self):
return SoftDeleteQuerySet(self.model).filter(active=True)
Wie Sie sehen oben ich sicher, dass Standard-Manager zu machen versucht, ist ein weicher Lösch-Manager (dh. Filter für aktive Datensätze nur) und auch Nutzgrenze limit_choices_to versuchen aber, dass sich herausstellen das ausländische Modell Feld nicht nur das "durch" -Modell, das ich wollte. Wenn Sie irgendwelche Vorschläge oder Empfehlungen haben, würde ich mich freuen, von Ihnen zu hören.
Danke!
Statt Soft-Deletes selbst zu implementieren, verwenden Sie etwas wie [Django-Reversion] (https://github.com/etianen/django-reversion). – Anonymous
Das soft delete ist bereits überall implementiert, ich kann es nicht mehr ändern. Ich wünschte, wir würden Reversion verwenden, es würde uns viele Kopfschmerzen ersparen. –