【问题标题】:Django inline model formset with 2 models带有 2 个模型的 Django 内联模型表单集
【发布时间】:2018-08-11 09:42:56
【问题描述】:

首先,请原谅我的新手问题。我确实复制了大部分代码,并尝试从 Django 文档中理解。

代码如下:

models.py

class Order(models.Model):
  ORDER_CHOICES = (
      ('import', 'IMPORT'),
      ('export', 'EXPORT')
  )

  storage = models.ForeignKey(Storage, on_delete=models.PROTECT)
  order_type = models.CharField(max_length=6, choices=ORDER_CHOICES)
  created_at = models.DateTimeField(auto_now_add=True)
  updated_at = models.DateTimeField(auto_now_add=True)

class Item(models.Model):
  def random_barcode():
      return str(random.randint(10000000, 99999999))

  type = models.ForeignKey(Type, on_delete=models.CASCADE)
  order = models.ForeignKey(Order, on_delete=models.CASCADE, null=True)
  brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
  item_name = models.CharField(max_length=50, help_text='Name of goods, max 50 characters')
  barcode = models.CharField(max_length=8, default=random_barcode, unique=True)
  production_date = models.DateField()
  expired_date = models.DateField()

  def __str__(self):
      return self.item_type

forms.py

class ItemForm(ModelForm):
  class Meta:
      model = Item
      exclude = ['order',]
      fields = ['type', 'brand', 'item_name', 'production_date', 'expired_date']
ItemFormSet = inlineformset_factory(Order, Item, form=ItemForm, extra=1)

views.py

class CreatePO(CreateView):
  model = Order
  context_object_name = 'orders'
  template_name = 'storages/create_po.html'
  fields = ['order_type', 'storage',]
  *#dun't know how to write below code....*

第一个问题:如何使用 inline formset 编写 CreatePO 视图?

第二个问题:我需要如下图所示的创建采购订单模板,如何添加“数量”字段? 这种模板需要Javascript,对吧?任何替代解决方案?我对javascript一无所知。

【问题讨论】:

    标签: django inline-formset


    【解决方案1】:

    首先,将def random_barcode(): 移动到def __str__(self): 之前,它的格式代码看起来很丑陋。

    然后让我们看一下您的图片,如果您没有适当的 Javascript 经验,您可以使用 Django 的 Admin Views,它更简单并且受 Django 2.1 支持。如果您想在admin-views 页面https://docs.djangoproject.com/el/2.1/releases/2.1/#model-view-permission 中向所有人授予权限,请阅读更多信息

    所以数量只会添加到Item 类中

    quantity = models.PositiveSmallIntegerField(default=1)
    

    对于你的表格,我认为你需要modelform_factory,所以我建议阅读这个https://docs.djangoproject.com/en/2.1/topics/forms/modelforms/#modelform-factory-function

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-23
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 2015-04-17
      • 2011-06-17
      相关资源
      最近更新 更多