Django-如何访问ForeignKey父母的属性?

时间:2018-12-30 05:40:11

标签: django django-models

我是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访问卖方的名称。可能吗?还是我在做我不应该做的事情?因为我在互联网上找不到任何类似的案例。

1 个答案:

答案 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)