Отображение значений внешнего ключа - PullRequest
0 голосов
/ 27 апреля 2020

Мой models.py выглядит так:

class Order(models.Model):
    items = models.ManyToManyField(OrderItem)

class OrderItem(models.Model): (item in the cart)
   item = models.ForeignKey(Item, on_delete=models.CASCADE)

class Item(models.Model):
    title = models.CharField(max_length=100)
    price = models.FloatField()
    discount_price = models.FloatField(blank=True, null=True)
    label = models.ManyToManyField(Label, blank=True)
    slug = models.SlugField(unique=True)
    description = models.TextField()

class Bike(models.Model):
    item = models.OneToOneField(Item, on_delete=models.CASCADE)
    brand = models.ManyToManyField(Brand)
    size = models.ManyToManyField(Size, blank=True)

class Accessory(models.Model):
    item = models.OneToOneField(Item, on_delete=models.CASCADE)
    brand_accessory = models.ManyToManyField(BrandAccessory)

Таким образом, в настоящее время поле item в моей OrderItem модели отображает название и количество элемента в Item модели:

def __str__(self):
    return f"{self.quantity} of {self.item.title}"

Item связан с OneToOneField с Bike и Accessory. Можно ли отобразить марку и размер Bike, если его добавить к OrderItem и brand_accessory, если Accessory добавить к OrderItem?

Это будет выглядеть как {количество} {item.title} (если велосипед)> {bike.brand} {bike.size} (если аксессуар)> {accessory.brand_accessory}

1 Ответ

2 голосов
/ 27 апреля 2020

Вы можете использовать hasattr , чтобы проверить, есть ли у вашего item требуемый OneToOneField

class OrderItem(models.Model):

    ...

    def __str__(self):
        if hasattr(self.item, 'bike'):
            #get value you need like: self.item.bike.brand
        if hasattr(self.item, 'accessory'):
            #get value you need like: self.item.accessory.brand_accessory
        return #get values you need together
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...