我有这些模型,我想根据数据构建表单:
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
表中为Beverage
的每个Location
创建一个新行。每个人都需要一个时间戳,所以我们可以有一个历史记录。我想我得到了我需要的表格集,但我没有成功找出如何为此实现它们。所以,这是一个两个部分:
答案 0 :(得分:2)
问题1:模型设计 - 我会从库存模型中删除位置字段,因为它已经在Beverage模型中,并且是多余的。否则,他们看起来很好。
问题2:表格集......
forms.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')
views.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将为查询集中的每个对象(Beverage)创建一个表单,该表单由所需位置过滤,并在自定义ModelForm中有一个额外字段来报告单位。