Python Django在模型保存方法中调用一个函数,并调用另一个函数来填充值

Python Django在模型保存方法中调用一个函数,并调用另一个函数来填充值,python,django,Python,Django,我在Django有一个模特 class File(models.Model): NORMAL = 'normal' AD = 'ad' FILE_TYPE_CHOICES = ( (NORMAL, 'Normal'), (AD, 'Ad'), ) file_name = models.CharField(max_length=50) file_type = models.CharField(max_length=1

我在Django有一个模特

class File(models.Model):
    NORMAL = 'normal'
    AD = 'ad'
    FILE_TYPE_CHOICES = (
        (NORMAL, 'Normal'),
        (AD, 'Ad'),
    )

    file_name = models.CharField(max_length=50)
    file_type = models.CharField(max_length=10, default=NORMAL,
        choices=FILE_TYPE_CHOICES)
    file_path = models.FileField('file', upload_to='documents/%Y/')
    duration = models.IntegerField()
    #prompt_id = models.CharField(max_length=50)

    def __unicode__(self):
        return self.file_name

    def save(self, *args, **kwargs):
        self.prompt_id = IvrUploadAudioFile(self.file_path)
        super(File, self).save(*args, **kwargs)
我在文件表中有一个列prompt\u id,但我不想在add/edit中显示prompt\u id字段。 我想插入prompt_id值,函数IvrUploadAudioFile将在场景后面返回该值。所以我在这里重写save方法

那么在哪里写IvrUploadAudioFile函数呢。
如何编写这种情况

如果要在Django admin中隐藏字段,需要将其设置为
editable=False


通过将
self.file path
传递给
IvrUploadAudioFile
类,我不确定您打算做什么,但编写的代码不会返回该对象的主键。

如果您想在Django admin中隐藏字段,则需要将其设置为
editable=False


通过将
self.file path
传递给
IvrUploadAudioFile
类,我不确定您打算做什么,但编写的代码不会返回该对象的主键。

如果您想在Django admin中隐藏字段,则需要将其设置为
editable=False


通过将
self.file path
传递给
IvrUploadAudioFile
类,我不确定您打算做什么,但编写的代码不会返回该对象的主键。

如果您想在Django admin中隐藏字段,则需要将其设置为
editable=False


通过将
self.file path
传递给
IvrUploadAudioFile
类,我不确定您打算做什么,但编写的代码不会返回该对象的主键。

Django模型只是普通的Python类,您可以向该类添加任意多的帮助器方法:

class File(models.Model):
    # -- normal stuff
    prompt_id = models.CharField(max_length=50, editable=False)

    def ivr_upload_audio_file(self):
        # do something with self.file_path
        return something

    def save(self, *args, **kwargs):
        self.prompt_id = self.ivr_upload_audio_file()
        super(File, self).save(*args, **kwargs)
至于您的另一个问题,关于不显示该字段-您可以添加
editable=False
以在admin和任何
ModelForm
s中隐藏该字段-但是,如果您只想在admin中隐藏该字段,但在其他表单中显示该字段-您可以自定义管理员以不显示该字段:

@admin.register(File)
class FileAdmin(admin.ModelAdmin):
    fields = ('file_name', 'file_path', 'file_type', 'duration',)

Django模型只是普通的Python类,您可以向类中添加任意数量的帮助器方法:

class File(models.Model):
    # -- normal stuff
    prompt_id = models.CharField(max_length=50, editable=False)

    def ivr_upload_audio_file(self):
        # do something with self.file_path
        return something

    def save(self, *args, **kwargs):
        self.prompt_id = self.ivr_upload_audio_file()
        super(File, self).save(*args, **kwargs)
至于您的另一个问题,关于不显示该字段-您可以添加
editable=False
以在admin和任何
ModelForm
s中隐藏该字段-但是,如果您只想在admin中隐藏该字段,但在其他表单中显示该字段-您可以自定义管理员以不显示该字段:

@admin.register(File)
class FileAdmin(admin.ModelAdmin):
    fields = ('file_name', 'file_path', 'file_type', 'duration',)

Django模型只是普通的Python类,您可以向类中添加任意数量的帮助器方法:

class File(models.Model):
    # -- normal stuff
    prompt_id = models.CharField(max_length=50, editable=False)

    def ivr_upload_audio_file(self):
        # do something with self.file_path
        return something

    def save(self, *args, **kwargs):
        self.prompt_id = self.ivr_upload_audio_file()
        super(File, self).save(*args, **kwargs)
至于您的另一个问题,关于不显示该字段-您可以添加
editable=False
以在admin和任何
ModelForm
s中隐藏该字段-但是,如果您只想在admin中隐藏该字段,但在其他表单中显示该字段-您可以自定义管理员以不显示该字段:

@admin.register(File)
class FileAdmin(admin.ModelAdmin):
    fields = ('file_name', 'file_path', 'file_type', 'duration',)

Django模型只是普通的Python类,您可以向类中添加任意数量的帮助器方法:

class File(models.Model):
    # -- normal stuff
    prompt_id = models.CharField(max_length=50, editable=False)

    def ivr_upload_audio_file(self):
        # do something with self.file_path
        return something

    def save(self, *args, **kwargs):
        self.prompt_id = self.ivr_upload_audio_file()
        super(File, self).save(*args, **kwargs)
至于您的另一个问题,关于不显示该字段-您可以添加
editable=False
以在admin和任何
ModelForm
s中隐藏该字段-但是,如果您只想在admin中隐藏该字段,但在其他表单中显示该字段-您可以自定义管理员以不显示该字段:

@admin.register(File)
class FileAdmin(admin.ModelAdmin):
    fields = ('file_name', 'file_path', 'file_type', 'duration',)

只要可以导入到项目中,就可以在任何地方编写它

from <insert_path_here> import IvrUploadAudioFile # Function written somewhere else. You need to insert the correct path here
from django.db import models

class File(models.Model):
    NORMAL = 'normal'
    AD = 'ad'
    FILE_TYPE_CHOICES = (
        (NORMAL, 'Normal'),
        (AD, 'Ad'),
    )

    file_name = models.CharField(max_length=50)
    file_type = models.CharField(max_length=10, default=NORMAL,
        choices=FILE_TYPE_CHOICES)
    file_path = models.FileField('file', upload_to='documents/%Y/')
    duration = models.IntegerField()
    #prompt_id = models.CharField(max_length=50, editable = False)

    def __unicode__(self):
        return self.file_name

    def save(self, *args, **kwargs):
        self.prompt_id = IvrUploadAudioFile(self.file_path)
        super(File, self).save(*args, **kwargs)
来自其他地方编写的import-IvrUploadAudioFile函数。您需要在此处插入正确的路径
从django.db导入模型
类文件(models.Model):
正常=‘正常’
AD='AD'
文件类型选择=(
(正常,'正常'),
(AD,"AD"),,
)
文件名=models.CharField(最大长度=50)
文件类型=models.CharField(最大长度=10,默认值=NORMAL,
选项=文件类型(选项)
file_path=models.FileField('file',upload_to='documents/%Y/'))
持续时间=models.IntegerField()
#prompt_id=models.CharField(最大长度=50,可编辑=False)
def ___; unicode(自):
返回self.file\u名称
def保存(自身、*args、**kwargs):
self.prompt\u id=IvrUploadAudioFile(self.file\u路径)
超级(文件,自我).save(*args,**kwargs)

要确保“管理”视图中的“提示id”字段不可编辑,请在模型中定义“提示id”字段时设置“可编辑=假”属性。

只要可以将其导入到项目中,就可以将其写入任何位置

from <insert_path_here> import IvrUploadAudioFile # Function written somewhere else. You need to insert the correct path here
from django.db import models

class File(models.Model):
    NORMAL = 'normal'
    AD = 'ad'
    FILE_TYPE_CHOICES = (
        (NORMAL, 'Normal'),
        (AD, 'Ad'),
    )

    file_name = models.CharField(max_length=50)
    file_type = models.CharField(max_length=10, default=NORMAL,
        choices=FILE_TYPE_CHOICES)
    file_path = models.FileField('file', upload_to='documents/%Y/')
    duration = models.IntegerField()
    #prompt_id = models.CharField(max_length=50, editable = False)

    def __unicode__(self):
        return self.file_name

    def save(self, *args, **kwargs):
        self.prompt_id = IvrUploadAudioFile(self.file_path)
        super(File, self).save(*args, **kwargs)
来自其他地方编写的import-IvrUploadAudioFile函数。您需要在此处插入正确的路径
从django.db导入模型
类文件(models.Model):
正常=‘正常’
AD='AD'
文件类型选择=(
(正常,'正常'),
(AD,"AD"),,
)
文件名=models.CharField(最大长度=50)
文件类型=models.CharField(最大长度=10,默认值=NORMAL,
选项=文件类型(选项)
file_path=models.FileField('file',upload_to='documents/%Y/'))
持续时间=models.IntegerField()
#prompt_id=models.CharField(最大长度=50,可编辑=False)
def ___; unicode(自):
返回self.file\u名称
def保存(自身、*args、**kwargs):
self.prompt\u id=IvrUploadAudioFile(self.file\u路径)
超级(文件,自我).save(*args,**kwargs)

要确保“管理”视图中的“提示id”字段不可编辑,请在模型中定义“提示id”字段时设置“可编辑=假”属性。

只要可以将其导入到项目中,就可以将其写入任何位置

from <insert_path_here> import IvrUploadAudioFile # Function written somewhere else. You need to insert the correct path here
from django.db import models

class File(models.Model):
    NORMAL = 'normal'
    AD = 'ad'
    FILE_TYPE_CHOICES = (
        (NORMAL, 'Normal'),
        (AD, 'Ad'),
    )

    file_name = models.CharField(max_length=50)
    file_type = models.CharField(max_length=10, default=NORMAL,
        choices=FILE_TYPE_CHOICES)
    file_path = models.FileField('file', upload_to='documents/%Y/')
    duration = models.IntegerField()
    #prompt_id = models.CharField(max_length=50, editable = False)

    def __unicode__(self):
        return self.file_name

    def save(self, *args, **kwargs):
        self.prompt_id = IvrUploadAudioFile(self.file_path)
        super(File, self).save(*args, **kwargs)
来自其他地方编写的import-IvrUploadAudioFile函数。您需要在此处插入正确的路径
从django.db导入模型
类文件(models.Model):
正常=‘正常’
AD='AD'
文件类型选择=(
(正常,'正常'),
(AD,"AD"),,
)
文件名=models.CharField(最大长度=50)
文件类型=models.CharField(最大长度