Как поместить больше информации в Django через модель? - PullRequest
0 голосов
/ 09 ноября 2019

Покупатель каждый раз покупал один тип продукта (включая несколько продуктов) у поставщика. Я не знаю, как добавить записи о закупках в django admin, которые включают дату покупки, название поставщика, тип продукта, название продукта и их количество.

class ProductSupplier(models.Model):
    product_supplier = models.CharField(max_length=50, unique=True, verbose_name="product supplier")

class ProductType(models.Model):
    product_type = models.CharField(max_length=50, unique=True, verbose_name="product type")
    product_suppliers = models.ManyToManyField(ProductSupplier, through='BuyProducts')    

class Product(models.Model):
    product_name = models.CharField(max_length=50, unique=True, verbose_name="product name")
    product_type = models.ForeignKey(ProductType, on_delete=models.CASCADE, verbose_name="product type")

class BuyProducts(models.Model):
    product_type = models.ForeignKey(ProductType, on_delete=models.CASCADE)
    product_supplier = models.ForeignKey(ProductSupplier, on_delete=models.CASCADE)
    date_bought = models.DateField()
    def __str__(self):
        return "bought %s from %s on %s" % (self.product_type, self.product_supplier, self.date_bought)

Я могу добавить или отредактироватьзаписи о закупках в django admin, в том числе дата покупки, название поставщика и тип продукта. Тем не менее, я не могу добавлять или редактировать названия продуктов и их количество. Любое предложение очень приветствуется.

Таблицы sql, подобные этим:

BuyProductType: buy_product_type_id, product_type_id, supplier_id, date_bought

BuyProductQuantity: buy_product_quantity_id, buy_produ_id_type_type_type_type*

1 Ответ

0 голосов
/ 10 ноября 2019

Я в основном решил эту проблему, добавив реляционную модель с ForeignKey к сквозной модели.

class BuyProductQuantity(models.Model):
    buy_product = models.ForeignKey(BuyProducts, on_delete=models.CASCADE)
    product_name = models.ForeignKey(Product, on_delete=models.CASCADE)
    product_quantity = models.IntegerField()

И admin.py вот так:

class BuyProductsInline(admin.TabularInline):
    model = BuyProducts
    extra = 2
class ProductTypeAdmin(admin.ModelAdmin):
    inlines = [BuyProductsInline]
    list_display = ('product_type',)
class BuyProductsAdmin(admin.ModelAdmin):
    list_display = ('buy_product', 'product_name', 'product_quantity')
admin.site.register(ProductType, ProductTypeAdmin)
admin.site.register(BuyProductQuantity, BuyProductsAdmin)

В ProductTypeна странице администратора я могу обновить информацию о BuyProducts. На странице администрирования BuyProductQuantity я могу выбрать один buy_product и обновить название и количество продукта.

Однако проблема все еще существует. На странице администрирования BuyProductQuantity, когда я выбираю один buy_product из выпадающего списка, я хочу отфильтровать выпадающий список продуктов в соответствии с выбранным типом продукта.

...