Django中的产品订单/购买模型

时间:2020-06-01 21:52:54

标签: python django django-models django-admin

我有一个包含名称,描述,货币,价格,供应商和图像字段的产品模型,并且我正在尝试实施订购商品,这样做有点麻烦。

基本上,我想要的是能够在管理员中访问Orders模型并添加订单号,客户名称(我已经实现了这两个)以及一些产品,每个产品都有数量。

# models.py
from django.db import models

class Vendor(models.Model):
    name = models.CharField(max_length=30)

    def __str__(self):
        return self.name

class Product(models.Model):
    currencies = [
    ('$', "US Dollars ($)"), 
    ]

    name = models.CharField(max_length=40)
    description = models.TextField()
    currency = models.CharField(max_length=5, choices=currencies, default="$")
    price = models.DecimalField(max_digits=10, decimal_places=2)
    vendor = models.ForeignKey(Vendor, on_delete=models.CASCADE)
    image = models.ImageField(default="not_found.jpg")

    def __str__(self):
        return self.name

class Customer(models.Model):
    name = models.CharField(max_length=30)
    date_of_birth = models.DateField()

    def __str__(self):
        return self.name

class Order(models.Model):
    order_number = models.CharField(max_length=20)
    customer = models.ForeignKey(Customer, on_delete=models.CASCADE)

我的尝试/解决方案:

  1. 在产品中添加ManyToManyField(无数量)
  2. 使用产品和订单的fk创建ProductInstance类(添加了数量,但您必须在admin中访问2个不同页面,而在admin的订单页面中看不到项目)

我还有其他方法可以实现此目的吗?还是我受第二种解决方案的困扰?这样做并不可怕,但我宁愿避免这样做,并能够在订单页面上添加商品

对不起,我听起来像乞I。我真的不是,但我不能说出好听的句子

编辑:我找到了我所需要的!

使用我提到的第二个解决方案,我创建了一个名为ProductInstance的类,然后将其重命名为OrderProduct,并创建了以下字段:

  1. 产品外键
  2. 订单外键
  3. 数量的IntegerField

order类具有以下字段:

  1. 订单号的CharField
  2. 客户外键
  3. 多对多通过OrderProduct进行生产

然后,我在admin.py中添加了以下内容:

# admin.py
...
class OrderInlines(admin.TabularInline):
    model = OrderProduct
    fk_name = "order"
    extra = 1

@admin.register(Order)
class OrderAdmin(admin.ModelAdmin):
    fields = ('order_number', "customer",)
    inlines = (OrderInlines,)

0 个答案:

没有答案