Django 管理员根据模型中保存覆盖的值预填充字段

时间:2021-02-16 19:59:18

标签: django django-models django-modeladmin

这个问题一直让我感到沮丧,因为我觉得我拥有所有的部分,但无法将它们组合在一起。总的来说,我对 Django 和 Web 开发人员还很陌生,到目前为止,大部分情况都非常顺利。

我正在构建一个简单的表单应用程序,其中每个表单都将通过随机生成的 slug 具有唯一的 URL,并且每个表单都会在大约一周后过期。模型令牌有两个字段,1) tokenid,它是随机 slug 和 pk,2) 一个使用该 slug 创建的 url 字段。我还覆盖了 save 方法,让管理员在每次点击 Add 时吐出一个新的 slug。

我的目标是预先填充 Django 管理中的 URL 字段,以便生成表单的人能够轻松单击、复制和粘贴。这些表格只会在面对面的过程后发送出去,所以我不关心可扩展性。我知道一旦将字段保存到 db,完整的 URL 将出现在 URL 字段中,但这似乎是管理人员犯错误的额外步骤。

#Models.py
def get_random_string():
    letters = keystring
    result_str = ''.join(random.choice(letters) for i in range(52))
    return(result_str)

class Token(models.Model):
    tokenid = models.CharField(primary_key=True, max_length = 52, default = get_random_string)
    url = models.CharField(blank=True, max_length = 200)

    def save(self, *args, **kwargs):
        self.url = 'localhost:8000/dir/' + str(self.tokenid)
        super(Token, self).save(*args, **kwargs)

我已经阅读了有关 prepopulated_fields 的内容。我还阅读了 get_changeform_initial_data。无论出于何种原因,我都无法弄清楚如何在 Django Admin 中将其组合在一起。

我尝试了很多不同的方法,在这一点上它只是一团糟,但我已经包含了我认为可以在下面工作的准系统(返回了一个属性错误)。我很确定这里的方法是 get_changeform_initial_data 但如果有人能指出我正确的方向,我将不胜感激。

#admin.py

class TokenAdmin(admin.ModelAdmin):
    def get_changeform_initial_data(self, request):
        return {'url': request.url}

admin.site.register(Token, TokenAdmin)

0 个答案:

没有答案