gpt4 book ai didi

python - Django - 使用外键获取对象

转载 作者:行者123 更新时间:2023-11-28 22:49:08 26 4
gpt4 key购买 nike

版本:Python 3.4 Django 1.7

我创建了一个包含不同画廊和它们自己的图像的画廊应用。

我的模型:

from django.db import models


class Gallery(models.Model):
title = models.CharField(max_length=200)
pub_date = models.DateTimeField('publish date')

def __str__(self):
return self.title


class Image(models.Model):
title = models.CharField(max_length=200)
gallery = models.ForeignKey(Gallery)
pub_date = models.DateTimeField('publish date')
file = models.ImageField(upload_to='img/gallery/'+str(Gallery.objects.get(pk=str(gallery)).id)+'/')

def __str__(self):
return self.title

您会看到我的图库图片 模型。在后端创建图像时,它应该在"img/gallery/gallery_id"

中动态创建一个文件夹

我的问题是 Image.gallery 在这里是一个 ForeignKey,我无法将它转换成 int 或 string 来使用它。是否有函数可以使用 Image 对象的 ForeignKey 从我的 Gallery 对象获取 ID?

我的解决方案

Gallery.objects.get(pk=str(gallery)).id

不工作。

顺便说一句:我认为外键总是像 id 一样的 int?不是吗?

最佳答案

Django 的工作方式会自动添加一个方便的方法,它将为您提供外键所代表的模型实例。这是您的 图库 字段。还有另一个字段,名称相同但附加了 _id,它保存实际的外键值。

正如 petkostas 所说,您可以传递接受 instancefilename 参数的函数。您应该使用 gallery_id 而不是 gallery.id 以防止对数据库进行不必要的调用。

def gallery_folder(instance, filename):
return '/'.join(['img/gallery', instance.gallery_id, filename])

class Image(models.Model):
...
file = models.ImageField(upload_to=gallery_folder)

关于python - Django - 使用外键获取对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24267267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com