Как я могу получить конкретное поле внешнего ключа, связанное с другой моделью в django?

models.py

 class Product(DateTimeModel):
     product_id = models.CharField(max_length=200)
     product_name = models.CharField(max_length=200)

     def __str__(self):
        return self.product_id


 class ProductVariantsManager(models.Manager):

      def colors(self):
          return super(ProductVariantsManager, self).filter(variant_type='Color', approval_status = "Approved")   



 class ProductVariants(DateTimeModel):
     product_id = models.ForeignKey(Product, related_name="product_variants", null=True, on_delete=models.CASCADE)
     variant_type = models.ForeignKey(VariantsType, null=True, on_delete=models.CASCADE)
     variant_value = models.ForeignKey(VariantsValue, null=True, on_delete=models.CASCADE)
     approval_status = models.CharField(max_length=50,choices=PRODUCT_STATUS,default="Pending",null=True, blank=True)
     objects = ProductVariantsManager()

     def __str__(self):
         return str(self.item_num)

HTML

 <select name="color" class="form-control col-7" required>
           {% for i in product_id.productvariants_set.colors %}
            <option selected value="{{ i.variant_value}}">{{ i.variant_value}}</option>
           {% endfor %}
  </select>

Продукт сохранил несколько вариантов на основе цветов. Здесь мне нужно получить значение variants_value(black, brown, red...) для конкретного продукта. Я ничего не получил с помощью этого запроса. Есть ли здесь проблема с иностранным ключом запроса? Нужна помощь, чтобы сделать это правильно.

Вы фильтруете variant_type='Color', но variant_type - это ForeignKey, а не CharField. Что-то вроде variant_type__name='Color' должно работать, но на самом деле здесь нет необходимости в FK, CharField с models.TextChoices будет достаточно.
Я на самом деле удивлен, что это не взорвалось. Вместо того чтобы пытаться отлаживать внутри шаблона, попробуйте запустить свои запросы в REPL и посмотреть, что вы получите на каждом шаге.
Кроме того, product_id - это целое число (как следует из названия) или настоящий объект Product?

Вернуться на верх