Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与表单集和inlineformset工厂相关的python django预取_Python_Django_Django Models_Django Views_Django Forms - Fatal编程技术网

与表单集和inlineformset工厂相关的python django预取

与表单集和inlineformset工厂相关的python django预取,python,django,django-models,django-views,django-forms,Python,Django,Django Models,Django Views,Django Forms,inlineformset_factory`50多行。 加载要花很长时间,并且要运行204个查询,才能通过几乎200个重复的查询获取数据 这是我的模型 class Item_type(models.Model): title = models.CharField(max_length=100, null=True) alias = models.CharField(max_length=20, null=True, blank=True) def __str__(sel

inlineformset_factory`50多行。 加载要花很长时间,并且要运行204个查询,才能通过几乎200个重复的查询获取数据

这是我的模型

class Item_type(models.Model):
    title = models.CharField(max_length=100, null=True)
    alias = models.CharField(max_length=20, null=True, blank=True)

    def __str__(self):
        return str(self.id) + " ("+ str(self.title) + ")"


class Item(models.Model):
    name = models.CharField(max_length=150, null=True, unique=True)
    active = models.BooleanField(default=False)
    code = models.CharField(max_length=20, null=True, blank=True)
    item_class = models.ForeignKey(Item_class,null=True, blank=True, on_delete=models.CASCADE, related_name='item_class')
    item_type = models.ForeignKey(Item_type,null=True, blank=True, on_delete=models.CASCADE, related_name='item_type')
    alias = models.CharField(max_length=20, null=True, blank=True)
    barcode = models.CharField(max_length=50, null=True, blank=True)
    stuff_qty = models.IntegerField(null=True, blank=True)

    def __str__(self):
        return str(self.alias) + " " + str(self.name + " (" + str(self.id) + ")")


class ReceipeMaster(models.Model):
    TYPE_OPTIONS = (('FINISHED GOODS', 'FINISHED GOODS'),)
    receipe_type = models.CharField(max_length=50, choices=TYPE_OPTIONS, default=TYPE_OPTIONS[0])
    item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='receipe')
    units = models.IntegerField(default=1)
    active = models.BooleanField(default=True)

    def __str__(self):
        return str(self.item.name)

    def get_absolute_url(self):
        return reverse("item_management:recipes_show", kwargs={"pk": self.pk})


class ReceipeDetail(models.Model):
    master = models.ForeignKey(ReceipeMaster, on_delete=models.CASCADE, related_name='items')
    item_type = models.ForeignKey(Item_type, null=True, on_delete=models.PROTECT)
    item = models.ForeignKey(Item, on_delete=models.PROTECT)
    quantity = models.IntegerField()

    def __str__(self):
        return str(self.item.name) + " (" + str(self.master) + ")"
如何在
表单.inlineformset\u工厂中获取与预取相关的信息

下面是forms.py中的代码

AddReceipeDetailFormSet = forms.inlineformset_factory(
    ReceipeMaster,
    ReceipeDetail,
    fields=( 'item_type', 'item', 'quantity'),
    extra=50,
    widgets={
        'item_type': forms.Select(attrs={'class': 'form-control'}),
        'item': forms.Select(attrs={'class': 'form-control'}),
        'quantity': forms.NumberInput(attrs={'class': 'form-control'}),
    }
)
这是我在views.py中的视图

def create_receipe(request):
    child_forms = AddReceipeDetailFormSet(request.POST or None)
    parent_form = ReceipeCreateForm(request.POST or None)
    context = {'parent_form': parent_form, 'child_forms': child_forms}
    if request.method == 'POST':
        if parent_form.is_valid():
            print('parent form is valid')
        else:
            print('invalid parent form', parent_form.errors)
        if child_forms.is_valid():
            print('child form is valid')
        else:
            print('invalid child form', child_forms.errors)
        print("post request is received***", request.POST)
    return render(request, 'receipes/create.html', context=context)

关于

请添加您的模型
ReceipeMaster
ReceipeDetail
,以及由字段
项目类型
项目
引用的模型(特别是这些模型的
\u str\uuuuuu
方法及其可能引用的任何字段)关于这个问题。@AbdulAzizBarkat为了您的反馈,我添加了模型供您参考,谢谢。这是否回答了您的问题?检查上述链接问题的答案。使用他创建的这些类,您将编写
AddReceipeDetailFormSet=forms.inlineformset\u工厂(ReceipeMaster,ReceipeDetail,form=CachingModelChoicesForm,formset=CachingModelChoicesFormSet,…)
,以解决您的问题。(基本上,问题在于表单集中的每个表单都在进行自己的查询以获取选择,链接的答案会缓存这些选择以解决此问题)