我是Django中的新手,我不知道该怎么做。
我有一个模型“卖方”:
class Seller(models.Model):
seller_name = models.CharField(max_length=50)
def __str__(self):
return self.seller_name
和模型“项目”:
class Item(models.Model):
seller = models.ForeignKey(Seller, on_delete=models.CASCADE)
item_name = models.CharField(max_length=100)
item_category = models.CharField(max_length=100, choices=ALL_CATEGORIES)
item_price = models.FloatField()
item_preview = models.ImageField(upload_to='previews/<the seller's name>')
def __str__(self):
return self.item_name
通过ForeignKey连接到卖方。
在此模型中,我有一个ImageField,并且我希望它将文件上传到Previews / Seller的名称目录,但是我不知道如何从Item访问卖方的名称。可能吗?还是我在做我不应该做的事情?因为我在互联网上找不到任何类似的案例。
答案 0 :(得分:1)
您可以这样访问卖方名称。
item = Item.objects.get(<condition>)
item.seller.seller_name
如果您使用过滤器
items = Item.objects.filter(<condition>)
items[0].seller.seller_name #You need to provide index in queryset
or
for item in items:
item.seller.seller_name
您无法提供这样的路径。您可以在upload_to中使用可调用对象,也可以使用lambda函数。
item_preview = models.ImageField(upload_to=lambda instance: 'previews/{0}'.format(instance.seller.seller_name))
如果您使用upload_to callable
item_preview = models.ImageField(upload_to=upload_file_handler)
def upload_file_handler(instance, filename):
return 'previews/{0}'.format(instance.seller.seller_name)