Mesusjk
3 سال پیش توسط Mesusjk مطرح شد
2 پاسخ

مدل Product در جنگو

سلام دوستان
دارم یه سایت فروشگاهی‌ای رو پیاده سازی میکنم که میتونه شامل انواع مختلف محصول باشه (تقریبا مثل دیجی کالا). مثلا میتونه موبایل، کتاب، لپ تاپ، میز و... داشته باشه.

میخواستم برای همشون فقط یه مدل Product بسازم و همه محصولات از روی این ساخته بشن. ولی دیدم اگه این کار رو بکنم فیلدهایی که بعنوان feature هر محصول ساختم خیلی زیاد میشن و خیلی موقع ساخت یه محصول جدید بی استفاده میشن. چون مثلا اگه من بخوام یه کتاب بسازم باید مثلا فیلدی که مربوط به تعداد صفحاتشه رو پر کنم ولی مثلا فیلدهایی که مربوط به لپ تاپ و موبایل و... هستن، کلا بی استفاده میشن.

به همین دلیل یه مدل Product ساختم که فیلدهای کلی مثل اسم محصول، عکس های محصول، دسته بندی، توضیحات محصول و... رو براش تعریف کردم و برای هر محصول (موبایل، کتاب، لپ تاپ و...) یه مدل جدا ساختم که این مدل از مدل Product ارث بری میکنه. به این صورت:

class Product(models.Model):
    name = models.CharField(max_length=120)
    price = models.IntegerField()
    description = models.TextField()
    #...
    class Meta:
        abstract = True

class MobileProduct(Product):
    # Fields that are specific to this product

class BookProduct(Product):
    # Fields that are specific to this product

class NotBookProduct(Product):
    # Fields that are specific to this product

حالا میخواستم بدونم آیا این روش و راه حلی که من پیاده سازی کردم روش درستیه یا شما راه حل بهتری رو سراغ دارید؟
خیلی ممنون میشم راهنماییم کنید ❤️


ثبت پرسش جدید
Nima Aram
تخصص : a simple full stack
@aramnima50 3 سال پیش مطرح شد
-1

@Mesusjk
یه مدل به اسم category ایجاد کنید و داخل مدل product بصورت forein key تعریفش کنید
بعد که مدل ساخته میشه تو فیلد category اسم دسته بندیتونو بذارین


محمد دادرسی
تخصص : backend
@mohamad.python 3 سال پیش آپدیت شد
0

سلام
دوستمون بالا که اشاره کردن به forein key
به جای اون بهتره که از ManytoManyField استفاده بشه و مشکل حل میشه

class Category(models.Model):
    parent = models.ForeignKey('self', default=None, null=True, blank=True, on_delete=models.SET_NULL,
                               related_name="children", verbose_name="زیردسته")
    title = models.CharField(max_length=200, verbose_name="عنوان دسته بندی")
    slug = models.SlugField(max_length=100, unique=True, verbose_name="آدرس دسته بندی")
    status = models.BooleanField(default=True, verbose_name="آیا نمایش داده شود؟")
    position = models.IntegerField(verbose_name="پوزیشن")
class product(models.Model):
    category = models.ManaytoManyField(Category)

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام