django - konkretny objekt z Many To Many Fields

2

Yo,

Wrocilem do starego projektu z django i potrzebuje uzyskac dostep do konkretnego elementu z ManyToManyFields, ktory jest foreign key.

Przyklad:

class Item(models.Model):
     title = models.CharField(max_length=100)
     price = models.FloatField()
     image = models.ImageField(default='default.jpg', upload_to='product_pics')
class OrderItem(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)
    ordered = models.BooleanField(default=False)
class Order(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    items = models.ManyToManyField(OrderItem)
    start_date = models.DateTimeField(auto_now_add=True)
    ordered = models.BooleanField(default=False)

Chce wyciagnac pojedynczy item z Order a nastepnie wyciagnac jego zdjecie.
Probowalem wrzucic wszystkie obiekty z Order w petle i podpiac pod funkcje w OrderItem, ktora zwraca item(foreign key klasy Item) ale nadal nie moge uzyskac zdjecia. Jakies rady ?

0

Tak jak napisano już w komentarzu ManyToMany jest niewłaściwe. Jedno zamówienie może mieć wiele pozycji zamówienia (OrderItem), ale jedna pozycja zamówienia nie występuje w wielu zamówieniach.

Z kolei żeby dobrać się do obrazka możesz zrobić w ten sposób:

items = Order.objects.select_related('items__item').get(id=4);

Dzięki takiemu zapisowi z bazy zostanie pobrane Order(id=4), a do niego zostaną pobrane wszystkie OrderItem oraz Item.

0
  1. Te relacje wygladaja na nieprzemyslane, nazwy pól odnośnie relacji też
  2. Używaj related_name przy FK i M2M

Gdybyś mial `related_name" mogłbyś zrobić coś takiego:

class Item(models.Model):
     title = models.CharField(max_length=100)
     price = models.FloatField()
     image = models.ImageField(default='default.jpg', upload_to='product_pics')
class OrderItem(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, blank=True, null=True)
    item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name="order_item")
    quantity = models.IntegerField(default=1)
    ordered = models.BooleanField(default=False)
class Order(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    items = models.ManyToManyField(OrderItem, related_name="orders")
    start_date = models.DateTimeField(auto_now_add=True)
    ordered = models.BooleanField(default=False)


queryset = Item.objects.filter(order_item__orders_id=ID.ORDER.KTORY.POTRZEBUJESZ) 

pozniej juz

for item in queryset: 
    item.image

1 użytkowników online, w tym zalogowanych: 0, gości: 1