具有 2 个模型的 Django 内联模型表单集
Django inline model formset with 2 models
首先,请原谅我的新手问题。我确实复制了大部分代码,并尝试从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视图?
第二个问题:我需要创建采购订单模板如下图,如何添加"Quantity"字段?
这种模板需要Javascript,对吧?任何替代解决方案?我不了解 javascript。
首先,把def random_barcode():
移到def __str__(self):
之前,这样格式化的代码看起来很丑。
然后让我们看看你的照片,如果你对 Javascript 没有适当的经验,你可以使用 Django 的管理视图,它更简单并且受 Django 2.1 支持。如果您想在 admin-views
页面 https://docs.djangoproject.com/el/2.1/releases/2.1/#model-view-permission
中向所有人授予权限,请阅读更多内容
所以里面的数量只会增加 Item
class
quantity = models.PositiveSmallIntegerField(default=1)
还有你的表格,在我看来,你需要modelform_factory
,所以我建议阅读这个https://docs.djangoproject.com/en/2.1/topics/forms/modelforms/#modelform-factory-function
首先,请原谅我的新手问题。我确实复制了大部分代码,并尝试从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视图?
第二个问题:我需要创建采购订单模板如下图,如何添加"Quantity"字段? 这种模板需要Javascript,对吧?任何替代解决方案?我不了解 javascript。
首先,把def random_barcode():
移到def __str__(self):
之前,这样格式化的代码看起来很丑。
然后让我们看看你的照片,如果你对 Javascript 没有适当的经验,你可以使用 Django 的管理视图,它更简单并且受 Django 2.1 支持。如果您想在 admin-views
页面 https://docs.djangoproject.com/el/2.1/releases/2.1/#model-view-permission
所以里面的数量只会增加 Item
class
quantity = models.PositiveSmallIntegerField(default=1)
还有你的表格,在我看来,你需要modelform_factory
,所以我建议阅读这个https://docs.djangoproject.com/en/2.1/topics/forms/modelforms/#modelform-factory-function