首页 > 解决方案 > 我想更新我创建的模型。但是,我想通过模型的 id 来做到这一点

问题描述

我想根据 id 号更新我的模型。我怎样才能做到这一点?我可以更新模型,但我想通过 id 来执行此操作,我遇到的另一个问题是我只希望创建者能够更新模型

模型.py

    class Advertise(models.Model):
        owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
        title = models.CharField(max_length=100, verbose_name="ilan başlığı")
        description = models.TextField(max_length=500, verbose_name="ilan açıklaması")
        price = models.PositiveIntegerField(default=0, verbose_name="Fiyat")
        square_meter = models.PositiveIntegerField(default=0, verbose_name="Metrekaresi")
        number_of_rooms = models.PositiveIntegerField(choices=NumberOfRoomsChoices.CHOICES, 
        verbose_name="Oda sayısı")
        building_age = models.PositiveIntegerField(choices=NumberOfBuildingAgeChoices.CHOICES, 
        verbose_name="Bina Yaşı")
        floor = models.PositiveIntegerField(choices=NumberOfFloorChoices.FLOOR_CHOICES, 
        verbose_name="Bulunduğu Kat")

序列化程序##

class AdvertiseMainSerializer(ModelSerializer):
    class Meta:
        model = Advertise
        fields = '__all__'

视图.py##

class UpdateAdvertiseData(UpdateAPIView):
    serializer_class = AdvertiseMainSerializer
    queryset = Advertise.objects.all()

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

urls.py##

url(r'^UpdateAdvertiseData/(?P<pk>[-\w]+)/$', UpdateAdvertiseData.as_view()),

标签: pythondjangodjango-modelsdjango-rest-frameworkdjango-views

解决方案


我自己又解决了这个问题。

当我在视图模型中添加以下功能时,我们只能更新属于登录用户的模型。

def get_queryset(self):
    return self.queryset.model.objects.filter(owner=self.request.user)

我们选择自动登录的用户使用以下功能。##

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

视图.py##

class UpdateAdvertiseData(RetrieveUpdateAPIView):
    serializer_class = AdvertiseMainSerializer
    queryset = Advertise.objects.all()

    def get_queryset(self):
        return self.queryset.model.objects.filter(owner=self.request.user)

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

推荐阅读