Có cách nào thông minh để thực hiện xóa trong trường hợp này không?Xóa đối tượng liên quan qua OneToOneField
class Bus(models.Model):
wheel = OneToOneField(Wheel)
class Bike(models.Model):
wheel = OneToOneField(Wheel)
pedal = OneToOneField(Pedal)
class Car(models.Model):
wheel = OneToOneField(Wheel)
class Wheel(models.Model):
somfields
car = Car()
wheel = Wheel()
wheel.save()
car.wheel = wheel
car.save()
car.delete() # I want to delete also wheel (and also all stuff pointing via OneToOneField eg pedal)
Tôi có cần phải ghi đè lên các phương pháp xóa của xe hơi, xe đạp, mô hình xe buýt hoặc là có một số cách tốt hơn? Tùy chọn khác là tạo ra các trường ô tô, xe đạp, xe buýt trên mô hình Bánh xe, nhưng nó không có ý nghĩa nhiều.
Vấn đề với trọng 'xóa() 'phương pháp này là nó sẽ không được gọi là nếu bạn làm với số lượng lớn xóa hoạt động như 'Car.objects.filter(). Delete()' – Rohan
@Rohan có bạn nói đúng. Đối với hoạt động xóa hàng loạt aka. querysets theo khuyến cáo của django docs - https://docs.djangoproject.com/en/dev/ref/models/querysets/#django.db.models.query.QuerySet.delete sử dụng tín hiệu django 'post_delete' decorator. –
@Rohan Để cụ thể một đoạn trích cho liên kết tài liệu django ở trên - >> Phương thức delete() thực hiện xóa hàng loạt và không gọi bất kỳ phương thức delete() nào trên các mô hình của bạn. Nó không, tuy nhiên, phát ra các tín hiệu pre_delete và post_delete cho tất cả các đối tượng đã xóa (bao gồm xóa các tầng). –