我有2个模型,我使用1个表单来更新它们,
models.py
class Item(models.Model):
item_category = models.ForeignKey(Category, on_delete="PROTECT")
item_name = models.CharField(max_length=100, null=False)
item_quantity = models.IntegerField(default=1)
created_at = models.DateTimeField(auto_now_add=True, editable=False)
created_by = models.CharField(max_length=250, editable=False)
def ___str__(self):
return self.item_name
class ItemOut(models.Model):
item_name = models.CharField(max_length=100, null=False)
item_quantity = models.IntegerField(default=0)
created_at = models.DateTimeField(auto_now_add=True, editable=False)
created_by = models.CharField(max_length=250, editable=False)
def __str__(self):
return self.item_name
此处是创建Item
模型的新条目的表单,仅更新ItemOut
表中的item_name
首先在 forms.py
中创建2个表单class AddItemForm(forms.ModelForm):
class Meta:
model = Item
exclude = ('created_by', 'created_at', )
labels = {
'item_category': 'إسم الفئة ',
'item_name': 'إسم الصنف',
'item_quantity': 'الكمية',
}
class AddItemOutForm(forms.ModelForm):
class Meta:
model = ItemOut
fields = ('item_name',)
labels = {
'item_name': 'تأكيد إسم الصنف',
}
然后使用1个视图函数来呈现表单
views.py
def add_item(request):
current_user = request.user
if request.method == 'POST':
new_item = AddItemForm(request.POST, request.FILES)
new_item_out = AddItemOutForm(request.POST, request.FILES)
if new_item.is_valid():
if new_item_out.is_valid():
item_out = new_item_out.save(commit=False)
item_out.save()
item = new_item.save(commit=False)
item.created_by = current_user
item.save()
return redirect('cat')
else:
new_item = AddItemForm()
new_item_out = AddItemOutForm()
all_cats = Category.objects.all()
cat_count = all_cats.count()
item_count = Item.objects.all().count()
all_units = Item.objects.aggregate(Sum('item_quantity'))['item_quantity__sum']
context = {
'all_units': all_units,
'item_count': item_count,
'cat_count': cat_count,
'new_item': new_item,
'current_user': current_user,
'new_item_out': new_item_out,
}
return render(request, 'townoftech_warehouse/add_item.html', context)
现在我需要确保在item_name
表中创建ItemOut
的输入字段与在item_name
表中创建Item
的字段具有相同的值
答案 0 :(得分:3)
我认为你不需要两种表格。只需使用一个这样的表格:
<强> forms.py 强>
class AddItemForm(forms.ModelForm):
class Meta:
model = Item
exclude = ('created_by', 'created_at', )
labels = {
'item_category': 'إسم الفئة ',
'item_name': 'إسم الصنف',
'item_quantity': 'الكمية',
}
用于处理表单的view.py代码
if request.method == 'POST':
new_item = AddItemForm(request.POST, request.FILES)
if new_item.is_valid():
item = new_item.save(commit=False)
item.created_by = current_user
item.save()
item_out = ItemOut.objects.create(
item_name=request.POST.get('item_name'),
created_by=current_user
)
return redirect('cat')