2017-01-21 1 views
0

Ich habe eine spezielle löschen, so dass ich nicht einfach DELETE-Methode verwenden kann.redifine Methode löschen oder zerstören in Modelviewset von Django Rest Framework

dies ist das Modell:

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) 

Der Punkt ist, wenn der "Typ" message ist, facebookpost oder info, dann muss ich außer icon, id und preview_title löschen. Bis jetzt konnte ich irgendeine Art von PUT verwenden. Aber ... wenn der "Typ" userdefined ist, dann muss ich alles löschen, wie ein normales Löschen.

Also, ich habe keine Ahnung, wie ich es machen kann. Ich dachte, dass ich vielleicht etwas wie .destroy() verwenden und es überschreiben könnte. Zum Beispiel kann ich perfom_create() oder get_queryset() außer Kraft setzen, aber nichts mit löschen.

Meine Ansicht sieht so:

class PersonalDetailViewSet(viewsets.ModelViewSet): 
    queryset = PersonalDetail.objects.all() 
    serializer_class = PersonalDetailSerializer 

    def get_queryset(self): 
     return PersonalDetail.objects.filter(Q(user_id=self.request.user)) 

    def perform_create(self, serializer): 
     serializer.save(user_id=self.request.user) 

    # Not delete icon, id, preview_title 

Vielleicht hat jemand weiß, wie es zu tun.

Antwort

0

Ich löste so:

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={"": ""}) 

Ich bin nicht sicher, ob es der beste Weg ist, aber es funktioniert. Wenn jemand einen besseren Weg kennt, schätze ich eine Antwort.

Verwandte Themen