【发布时间】:2014-04-20 08:32:24
【问题描述】:
我正在使用 django 管理员来修改表中的记录。问题是每当我修改一个条目时,当我点击保存时,而不是修改那个条目,旧条目不会被修改,而是会添加一个包含修改后详细信息的新条目。
例如,如果我有以下情况:
Aardvark | Orycteropus | Some description | aardvark | animals/images/aardvark.jpg
当我将第一个字段更改为 Aardvarkon 时,我得到以下信息:
Aardvark | Orycteropus | Some description | aardvark | animals/images/aardvark.jpg
Aardvarkon | Orycteropus | Some description | aardvark | animals/images/aardvark.jpg
我有以下 django 模型:
def article_file_name(instance, filename):
return ANIMAL_IMAGES_BASE_DIR[1:] + instance.ai_species_species_sanitized + '.jpg'
class ai_species(models.Model):
ai_species_species = models.CharField('Species', max_length=100, primary_key=True, db_column='species')
ai_species_genus = models.ForeignKey(ai_genera, max_length=50, blank=False, null=False, db_column='genus')
ai_species_description = models.CharField('Description', max_length=65000, db_column='description')
ai_species_species_sanitized = models.CharField(max_length=100, blank=False, null=False, db_column='species_sanitized')
image_url = models.ImageField(max_length=100, storage=OverwriteStorage(), validators=[validate_jpg_extension], upload_to=article_file_name)
class Meta:
db_table = 'Species'
verbose_name = 'Animal species'
verbose_name_plural = 'Animal species'
def __unicode__(self): # Required, don't remove.
return self.ai_species_species
还有以下助手:
def validate_jpg_extension(value):
if not value.name.lower().endswith('.jpg') and not value.name.lower().endswith('.jpeg'):
raise ValidationError(u'Invalid file format! Only jpg or jpeg files allowed!')
class OverwriteStorage(FileSystemStorage):
def get_available_name(self, name):
# If the filename already exists, remove it.
if self.exists(name):
os.remove(os.path.join(settings.MEDIA_ROOT, name))
return name
这是该表的 MySQL 表架构:
这是一种非常违反直觉的行为,我还没有在网上发现任何其他这种情况。对此的任何帮助将不胜感激。
【问题讨论】:
标签: mysql django django-models django-admin