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

Python 如何在创建api时在Django admin中保存更改的值?,python,django,django-models,django-views,django-rest-framework,Python,Django,Django Models,Django Views,Django Rest Framework,在Django Admin中,我显示了一个url。 此url是使用其附加到的对象的id创建的。 我正在使用python、django和django rest框架。 在我看来,我对ApiDetail类有逻辑。这里我重写了“get”方法。 我在views.py中递增当前对象: currentObject = Api.objects.get(id=pk) currentObject.currentNumber += 1 currentObject.save() return self.retrieve

在Django Admin中,我显示了一个url。
此url是使用其附加到的对象的id创建的。
我正在使用python、django和django rest框架。
在我看来,我对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保存方法以更新formUrl字段。
我遇到的问题是,当一个表单第一次添加到Django admin并保存时,url显示:

https://custumUrl/none/
它应该说:

https://custumUrl/1/

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

是否在
Api
类中定义了
currentNumber

另外,在
Api
类中,定义了
myUrl
,但在save方法中是
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()

Api
类中是否定义了
currentNumber

另外,在
Api
类中,定义了
myUrl
,但在save方法中是
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()

我认为丹尼尔的评论是对的,你应该听从他们的建议

但如果不想这样做,则应首先保存对象,然后为url分配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) 

我认为丹尼尔的评论是对的,你应该听从他们的建议

但如果不想这样做,则应首先保存对象,然后为url分配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) 

因为在保存对象之前分配url,所以在定义ID之前。但是,为什么要将URL保存为字段,而不是在必要时提供一个方法来输出它呢?我需要将URL作为字段,以便在ApiAdmin类中显示它。在admin.py中类ApiAdmin(admin.ModelAdmin)。列表显示=('objectName','myUrl')。我的用户将使用Django管理员并提供URL供其他网站使用。不是这样。您可以在管理和编辑表单中显示方法的结果。因为您在保存对象之前分配了url,所以在定义ID之前。但是,为什么要将URL保存为字段,而不是在必要时提供一个方法来输出它呢?我需要将URL作为字段,以便在ApiAdmin类中显示它。在admin.py中类ApiAdmin(admin.ModelAdmin)。列表显示=('objectName','myUrl')。我的用户将使用Django管理员并提供URL供其他网站使用。不是这样。您可以在管理和编辑表单中显示方法的结果。