【问题标题】:objects not deleting from database. Django, Django Rest Framework未从数据库中删除的对象。 Django,Django 休息框架
【发布时间】:2018-03-14 23:55:52
【问题描述】:

我有以下型号:

class Venue(models.Model):
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=1000, null=True, blank=True)
    streetaddress1 = models.CharField(max_length=150)
    streetaddress2 = models.CharField(max_length=150 ,null=True, blank=True)
    approved = models.BooleanField(default=False)
    declined = models.BooleanField(default=False)
    eventplannerstaff = models.BooleanField(default=False)
    declineddate = models.DateField(null=True, blank=True)
    declineddatestring = models.CharField(max_length=50, blank=True, null=True)
    declinereason = models.CharField(max_length=200, blank=True, null=True)


class Room(models.Model):
    venue = models.ForeignKey(Venue, on_delete=models.CASCADE)
    name = models.CharField(max_length=100, null=True, blank=True)
    online = models.BooleanField(default=False)
    description = models.CharField(max_length=1000, blank=True, null=True)
    privateroom = models.BooleanField(default=False)
    semiprivateroom = models.BooleanField(default=False)
    seatedcapacity = models.CharField(max_length=10, null=True, blank=True)
    standingcapacity = models.CharField(max_length=10, null=True, blank=True)

我有一个带有删除方法的 REST 端点。

我正在尝试删除一个房间。房间与场地相关联。我没有直接删除房间,因为我想用这种方法暴露场地。权限代码还没有写,但我想看看用户是否有权限乱搞场地房间。

删除方法有效,但实际上并未从数据库中删除房间。我究竟做错了什么?

def delete(self, request, *args, **kwargs):
        venuepk = kwargs.get('venuepk', None)
        venue = get_object_or_404(Venue, pk=venuepk)
        venuerooms = venue.room_set.all()
        roompk = kwargs.get('roompk')
        roomobject = None
        for room in venuerooms:
            if room.pk == roompk:
               roomobject = Room.objects.get(pk=roompk)
               roomobject.delete()
               roomobject.save()
               return Response({})

        return Response(status.HTTP_404_NOT_FOUND)

【问题讨论】:

    标签: django django-models django-rest-framework sql-delete


    【解决方案1】:

    删除

    roomobject.save()
    

    它将对象写回数据库。

    【讨论】:

      【解决方案2】:

      实际上是你重新创建它们:

       roomobject.delete()
       roomobject.save()
      

      第一行删除房间,第二行使用相同的 ID 再次保存它们。 如果你想删除它们,只需要调用.delete()

      【讨论】:

        猜你喜欢
        • 2018-08-23
        • 1970-01-01
        • 2021-11-26
        • 1970-01-01
        • 2013-04-08
        • 2016-09-11
        • 2015-02-25
        相关资源
        最近更新 更多