我有一个特殊的删除,所以我不能只使用DELETE方法。
这是模型:
class PersonalDetail(models.Model):
icon = models.URLField(_('icon'), max_length=500, blank=True, default='')
date = models.DateTimeField(_('date'), auto_now_add=True)
checked = models.BooleanField(_('checked'), blank=True, default=False)
priority = models.CharField(_('priority'), blank=True, max_length=1)
preview_title = models.CharField(_('preview_title'), blank=True, max_length=100)
preview_text = models.TextField(_('preview_text'), blank=True)
preview_name = models.CharField(_('preview_name'), blank=True, max_length=100)
type = models.CharField(_('type'), choices=PERSONAL_DETAILS_INFO, default='Info', max_length=100, blank=False)
content = JSONField(_('content'))
user_id = models.ForeignKey(User, related_name='userId', on_delete=models.CASCADE)
关键是,当“类型”为message
,facebookpost
或info
时,我必须删除icon
,id
和{{ {1}}。到现在为止,我可以使用某种PUT。但是......当“类型”是preview_title
时,我必须删除所有内容,就像正常删除一样。
所以,我不知道如何做到这一点。我想也许我可以使用类似userdefined
的东西并覆盖它。例如,我知道如何覆盖.destroy()
或perfom_create()
,但没有删除任何内容。
我的观点看起来如此:
get_queryset()
也许有人知道该怎么做。
答案 0 :(得分:0)
我解决了这个问题:
def perform_destroy(self, instance):
if instance.type == 'userdefined':
instance.delete()
else:
serializer = PersonalDetailSerializer(instance, data=self.request.data)
serializer.is_valid()
serializer.save(checked=False)
serializer.save(preview_text='')
serializer.save(preview_name='')
serializer.save(content={"": ""})
我不确定它是否是最佳方式,但它确实有效。如果有人知道更好的方式,我会很感激答案。