python - 当没有空字段时,该字段为必填字段,出现错误

标签 python django django-mptt

这是我的观点:

class EditInventoryView(UpdateView):
    model = Inventory
    form_class = InventoryForm
    template_name = 'inventory/detail.html'

    def get(self, request, **kwargs):
        object = super(EditInventoryView, self).get_object()
        formset = self.form_class(instance=object)      
        context = {
            'form': formset,
            'item': object,
        }
        return render(request, 'inventory/detail.html', context) 

    def post(self, request, **kwargs):
        object = super(EditInventoryView, self).get_object()
        form = self.form_class(request.POST, request.FILES, instance=object)
        context = {
            'form': form, 
            'item': object,
        }
        if form.is_valid():
            object = form.save()
            messages.success(request, "Saved %s!" % object)
            return redirect(object.get_absolute_url())
        else:
            messages.error(request, 'Change a few things up and try submitting again. %s' % form.errors)
            return render(request, 'inventory/detail.html', context)

当我提交时,总是出现错误消息:

Change a few things up and try submitting again. <ul class="errorlist"><li>connections<ul class="errorlist"><li>This field is required.</li></ul></li></ul>

知道这个表单曾经有效,但也许我改变了模型中的某些内容,导致它不起作用。

型号:

class Inventory(MPTTModel):
    type = models.ForeignKey('inventory_types.Type', db_column='type_id')
    name = models.TextField(db_column='value')
    asset_tag = models.IntegerField(db_column='asset_tag', unique=True, null=True, blank=True)
    parent = TreeForeignKey('self', null=True, blank=True, related_name='children')

    connections = models.ManyToManyField('self', related_name='connections')

    objects = InventoryManager()
    tree = TreeManager()

    class Meta: 
        db_table = 'inventory'
        verbose_name_plural = 'Inventory Items'

    class MPTTMeta:
        order_insertion_by = ['type']

    def __unicode__(self):
        return u'[%s] %s' % (self.type.name, self.name)

    def get_related_descendants(self, include_self=False):
        return self.get_descendants(include_self=include_self) \
                   .select_related('type', 'parent').prefetch_related('connections')

    def get_related_ancestors(self, include_self=False):
        return self.get_ancestors(include_self=include_self) \
                   .select_related('type', 'parent').prefetch_related('connections')

    def get_absolute_url(self):
        return reverse('inventory:view', args=(self.id,))

    def add_anc_type(self, id, all_types, all_objects):
        if id is not self.id: all_types.add(all_objects[id][1])
        if all_objects[id][0] is not None:
            self.add_anc_type(all_objects[id][0], all_types, all_objects)

    def add_desc_type(self, id, all_types, all_objects):
        if id not in all_objects: return
        for child, type_id in all_objects[id].iteritems():
            all_types.add(type_id)
            self.add_desc_type(child, all_types, all_objects)

最佳答案

在连接上设置blank=True 将消除表单的错误。如果您希望文件在数据库中可为空,则可以设置 null=True 或仅建立默认值。

为了消除表单错误,您只需执行以下操作:

connections = models.ManyToManyField('self', related_name='connections', blank=True)

希望这有帮助!

关于python - 当没有空字段时,该字段为必填字段,出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17198075/

相关文章:

python - Django MPTT 获取相关对象

django - Django-MPTT 树的外键在管理内联中生成 SQL 请求 Storm

python - 等值区域图未显示输出中的颜色变化

python - 通过Python将JSON转换为字典

python - Django 未使用的方法参数

Python coverage.py exclude_lines

django-rest-framework - 如何使用 Django Rest Framework 有效地序列化 django-mptt?

python - 从字符串python正则表达式中提取匹配组

python - 如何从 3D 多边形制作高程模型?

python - 如何将登录(经过身份验证)的用户分配给他们提交的表单数据?