gpt4 book ai didi

python - Django:创建动态表单

转载 作者:行者123 更新时间:2023-11-28 17:50:45 24 4
gpt4 key购买 nike

我有这些模型,我想根据数据构建表单:

class Location(models.Model):
name=models.CharField(max_length=255)
location_id=models.CharField(max_length=255)
organization=models.CharField(max_length=255)

def __unicode__(self):
return self.name

class Beverage(models.Model):
name=models.CharField(max_length=255)
location=models.ForeignKey(Location)
fill_to_standard=models.IntegerField(max_length=10)
order_when_below=models.IntegerField(max_length=10)

def __unicode__(self):
return self.name

class Inventory(models.Model):
location=models.ForeignKey(Location)
beverage=models.ForeignKey(Beverage)
units_reported=models.IntegerField(max_length=10)
timestamp=models.DateTimeField(auto_now=True)

这是我想要发生的事情,当用户去更新特定位置的库存时,我希望他们得到一个表格,列出该位置的所有可能饮料(每个位置的饮料不同),然后创建一个 Inventory 表单,它将在 Inventory 表中为该 Location 的每个 Beverage 创建一个新行。每个人都需要一个时间戳,这样我们才能拥有历史。我想我知道我需要表单集,但是我没有成功地弄清楚如何为此实现它们。所以,这是一种由两部分组成的方式:

  1. 我的模型设计是否适合这个问题?
  2. 我如何制作根据饮料数量自行构建的表格?

最佳答案

问题 1:模型设计 - 我会从库存模型中删除位置字段,因为它已经在饮料模型中,并且是多余的。否则,它们对我来说看起来不错。

问题 2:表单集...

表单.py

from django import forms
from my_project.my_app.models import Beverage

class InventoryForm(forms.ModelForm):
units_reported = forms.IntegerField()
class Meta:
model = Beverage
fields = ('name', 'id')

View .py

from django.forms.models import modelformset_factory
from my_project.my_app.models import Beverage, Inventory

def update_inventory(request, location_id):

InventoryFormSet = modelformset_factory(Beverage, form=InventoryForm)
qs = Beverage.objects.filter(location=location_id)
formset = InventoryFormSet(queryset=qs)
if request.method == 'POST':
formset = InventoryFormSet(request.POST)
if formset.is_valid():
for form in formset:
beverage = form.save(commit=False)
units_reported = form.cleaned_data['units_reported']
Inventory(beverage=beverage, units_reported=units_reported).save()
...

modelformset_factory 将为查询集中的每个对象(饮料)创建一个表单,该表单按所需位置过滤,并且在自定义 ModelForm 中有一个额外的字段来报告单位。

关于python - Django:创建动态表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10576909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com