django - 重写 BaseInlineFormset 的删除函数
问题描述
我正在考虑对记录进行软删除。如果“网站”不是外键(例如“RetailerRatingGroup”),则应照常删除。但是,它是另一个对象的外键,我想取消删除,而是将 Website.active 属性更改为 false。谁能指出我应该如何去做的正确方向。
class Website(models.Model):
retailer = models.ForeignKey('Retailer', on_delete=models.PROTECT)
url = models.URLField()
short_name = models.CharField(max_length=15)
active = models.BooleanField(default=True)
class RetailerRatingGroup(models.Model):
retailer = models.ForeignKey(Retailer, on_delete=models.PROTECT)
channel_productcat = models.ForeignKey('ChannelProductcatGroup', on_delete=models.PROTECT)
website = models.ForeignKey(Website, blank=True, null=True, on_delete=models.PROTECT)
current_rating = models.ForeignKey('Rating', default=None, blank=True, null=True, on_delete=models.SET_DEFAULT)
解决方案
好的......所以在环顾四周后,我发现了以下内容:
class SoftDeleteInlineFormset(BaseInlineFormSet):
def delete_existing(self, obj, commit=True):
if commit:
if not obj.retailerratinggroup_set.all().exists():
obj.delete()
else:
obj.active = False
obj.save()
WebsiteFormSet = inlineformset_factory(Retailer, Website, form=WebsiteForm, formset=SoftDeleteInlineFormset, max_num=10, extra=3, can_delete=True)
理想情况下,最好查看是否有任何模型使用网站实例作为外键。
推荐阅读
- mysql - 如何编写多对多的sql脚本
- php - 使用 laravel 插入图像时如何在 public/storage/annonces/Month2020 中创建文件夹?
- flutter - 是连接到 Firestore 所需的苹果开发者帐户
- javascript - 突变不更新Vuex中的数据
- sas - 使用多个电子表格将 SAS 中的多个数据集输出到一个 excel 输出中
- python - 如何使用 pymongo 和 Flask-Login 的会话?
- swift - 设置后更新 UserDefaults
- java - 显示非活动类的吐司
- javascript - 如何使用基于数据库数组的 javascript 创建动态表单输入
- bash - Shell 脚本 - 如何将最后修改的 AWS S3 对象从一个存储桶复制到另一个存储桶?