• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak połączyć model zamówień z produktami?

Object Storage Arubacloud
0 głosów
208 wizyt
pytanie zadane 21 kwietnia 2023 w Python przez tonn204 Mądrala (7,440 p.)

Witam, mam takie dwa modele jak poniżej. Chcę aby to jednego zamówienia była przypisana dowlna liczba produktów. Jaką mogę ze sobą powiązac te dwa modele. Zmieniłem foregin key z w Order na ManyToManyField i jako argumetn podałem product ale w panelu admina nic się nie zmeiniłeo dalej mogę wybrać tylko jeden produkt. Jak to naprawić?

from django.db import models
from django.urls import reverse
from django.utils import timezone
from PIL import Image
from ckeditor.fields import RichTextField
from django.contrib.auth import get_user_model


class Product(models.Model):
    name = models.CharField(max_length=100)
    amount = models.IntegerField(default=0)
    description = RichTextField(
        blank=True, null=True
    )  
    price = models.DecimalField(max_digits=12, decimal_places=2)
    image = models.ImageField(default="default.png", upload_to="product_pics")
    date_added = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.name

    def save(self):
        super().save()

        img = Image.open(self.image.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.image.path)

    def get_absolute_url(self):
        return reverse("shop-product-detail", kwargs={"pk": self.pk})


class Order(models.Model):
    sent = "sent"
    delivered = "delivered"
    pending = "pending"
    STATUS = (
        (sent, "Sent"),
        (delivered, "Delivered"),
        (pending, "Pending"),
    )
    user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    product = models.ManyToManyField(Product, on_delete=models.CASCADE)
    date_ordered = models.DateTimeField(default=timezone.now)
    amount = models.IntegerField(default=1)
    total_price = models.DecimalField(max_digits=12, decimal_places=2)
    status = models.CharField(max_length=20, choices=STATUS, default="pending")

 

komentarz 22 kwietnia 2023 przez marcin99b Szeryf (82,180 p.)
Teoretycznie nie powinieneś wiązać zamówienia z produktami, bo co jeśli zmieni się cena produktu albo jego opis, już po złożeniu zamówienia?

Zamówienie powinno zawierać kopie produktu z chwili sprzedaży
komentarz 23 kwietnia 2023 przez tonn204 Mądrala (7,440 p.)
A jak mogę stworzyć taką kopię?
komentarz 23 kwietnia 2023 przez Nudzi mi się Gaduła (4,460 p.)

@marcin99b, chyba kopia całego produktu to przesada. Cena i ewentualnie stawka vat powinna wystarczyć. Zmiaa tytułu czy opisu nie ma jakiegoś znaczenia dla zamówienia. 

komentarz 23 kwietnia 2023 przez marcin99b Szeryf (82,180 p.)

to już zależy od tego ile ma sie pieniędzy, jeśli ktoś może pozwolić sobie na zapis całej kopii produktu, to lepiej zapisać całość "tak dla pewności"

ale rzeczywiście, podstawowe dane powinny wystarczyć, rzadko się zdarza że ktoś zmienia produkt na coś kompletnie innego, pod tym samym ID, teoretycznie nigdy nie powinno być takich sytuacji... no ale w życiu są różne sytuacje

osobiście jestem fanem zasady, jeśli coś da się zrobić źle, to tylko kwestia czasu zanim ktoś to zrobi

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
0 odpowiedzi 72 wizyt
pytanie zadane 20 maja 2019 w Python przez gintoki996 Nowicjusz (170 p.)
0 głosów
0 odpowiedzi 264 wizyt
pytanie zadane 3 sierpnia 2019 w Python przez reaktywny Nałogowiec (40,990 p.)
0 głosów
1 odpowiedź 126 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...