簡體   English   中英

保存實例之前如何獲取Django模型實例的pk

[英]How to get pk of an instance of a django model before saving the instance

我正在嘗試使用models.ImageField(upload_to=upload_location)上傳圖像

def upload_location(instance,filename):
    print("%s/%s"%(instance.id,filename))
    return "%s/%s" %(instance.id,filename)

但是它給出了"GET /media/None/image_qacfEsv.jpg HTTP/1.1"我嘗試使用slug字段,它工作正常,但是idpk都不起作用,我想使用obj ID來命名圖像的文件夾,但是none給出在id屬性中這是我的文件

    def upload_location(instance,filename):
    print("%s/%s"%(instance.id,filename))
    return "%s/%s"%(instance.id,filename)

class Post(models.Model):
    draft = models.BooleanField(default=False)
    publish = models.DateField(auto_now=False,auto_now_add=False)
    user = models.ForeignKey(settings.AUTH_USER_MODEL,default=1)
    slug = models.SlugField(unique=True)
    title = models.CharField(max_length=120)
    image = models.ImageField(upload_to=upload_location,
                          null=True,blank=True,
                          width_field="width_field",
                          height_field="height_field")
    height_field = models.IntegerField(default=0)
    width_field = models.IntegerField(default=0)
    content = models.TextField()
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)

保存對象之前無法獲取pk實際上,檢查對象是否具有pk是檢查其是否已保存的好方法。

因此,我建議您在模型上添加一個UUID字段。 就像是:

import uuid

class Post(models.Model):
    uuid = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
    ...

uuid字段將是唯一的,並且在創建對象時將可用,因此可以在上載路徑中使用它。

我遇到了類似的問題,這就是我的做法。

def upload_location(instance, filename):
    #return "%s/%s.%s" %(instance.id, instance.id, extension)
    if not instance.id:
        Model = instance.__class__
        new_id=None
        try:
            new_id = Model.objects.order_by("id").last().id
            if new_id:
                new_id += 1
            else:
                pass
        except:
            new_id=1
    else:
        new_id = instance.id
    return "%s/%s/%s" %(Model.__name__, new_id, filename)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM