如何在api创建中保存Django admin中的更改值?

时间:2016-05-09 15:55:08

标签: python django django-models django-views django-rest-framework

在Django Admin中我显示了一个URL 这个url是使用id附加的对象创建的。
我正在使用python,django和django-rest-framework 在我看来,我在ApiDetail类上有逻辑。在这里我覆盖'get'方法。
我在views.py中增加当前对象:

currentObject = Api.objects.get(id=pk)
currentObject.currentNumber += 1
currentObject.save()
return self.retrieve(request, *args, **kwargs) 

在models.py中我设置了url字段:

class Api(models.Model):
    myUrl = models.CharField(max_length=500, blank=True, verbose_name="Url", editable=False)

    def save(self, *args, **kwargs):
        self.formUrl = "https://custumUrl/"+str(self.id)+"/"        
        super(Api, self).save(*args, **kwargs) 

这里我重写了api save方法来更新formUrl字段 我遇到的问题是当表单首次添加到Django管理员并保存网址时说:

https://custumUrl/none/

应该说:

https://custumUrl/1/

或任何数字,但绝对是对象的数量。

2 个答案:

答案 0 :(得分:2)

我认为丹尼尔的评论是正确的,你应该听从他们的意见。

但是如果您不想这样做,那么您应首先保存一个对象,然后为该网址分配一个id值,然后再次保存:

class Api(models.Model):
    myUrl = models.CharField(max_length=500, blank=True, verbose_name="Url", editable=False)

    def save(self, *args, **kwargs):
        super(Api, self).save(*args, **kwargs)
        self.formUrl = "https://custumUrl/"+str(self.id)+"/"        
        super(Api, self).save(*args, **kwargs) 

答案 1 :(得分:0)

currentNumber类中是否定义了Api

此外,在您的Api课程中,您已定义myUrl,但在保存方法中,它是formUrl

也许尝试这样的事情:

class Api(models.Model):
    formUrl = models.CharField(max_length=500, blank=True, verbose_name="Url", editable=False)

    def save(self):
        """If this is the firsts time populate required details, otherwise update it."""
        if not self.id:
           latest_obj = Api.latest('id')
           this_id = latest_obj.id
           self.formUrl = "https://custumUrl/"+str(this_id)+"/"        
           super(Api, self).save()
        else:
           #Save it as is
           super(Api, self).save()