检查django形式的值是否相同

时间:2018-05-08 11:07:19

标签: python django

我有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

的1个字段

首先在 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的字段具有相同的值

1 个答案:

答案 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')