带有可选外键字段的 Django Formset 验证

发布于 2024-09-01 09:26:34 字数 984 浏览 5 评论 0原文

使用 modelformset_factory 构建 ModelFormSet 并使用具有可选foreignkey的模型,如何创建空(null)关联以在该表单上进行验证?

这是一个示例代码:

### model
class Prueba(models.Model):
    cliente = models.ForeignKey(Cliente, null = True)
    valor = models.CharField(max_length = 20)

### view

def test(request):
    PruebaFormSet = modelformset_factory(model = Prueba, extra = 1)
    if request.method == 'GET':
        formset = PruebaFormSet()
        return render_to_response('tpls/test.html', {'formset' : formset},
                                  context_instance = RequestContext(request))
    else:
        formset = PruebaFormSet(request.POST)
        # dumb tests, just to know if validating
        if formset.is_valid():
            return HttpResponse('0')
        else:
            return HttpResponse('1')

在我的模板中,我只是调用呈现组合字段的 {{ form.cliente }} 方法,但是,我希望能够选择一个空的(标记为“------” ") 值,因为 FK 是可选的...但是当提交表单时,它不会验证。

这是正常行为吗?我如何使该字段跳过所需的验证?

Having a ModelFormSet built with modelformset_factory and using a model with an optional ForeignKey, how can I make empty (null) associations to validate on that form?

Here is a sample code:

### model
class Prueba(models.Model):
    cliente = models.ForeignKey(Cliente, null = True)
    valor = models.CharField(max_length = 20)

### view

def test(request):
    PruebaFormSet = modelformset_factory(model = Prueba, extra = 1)
    if request.method == 'GET':
        formset = PruebaFormSet()
        return render_to_response('tpls/test.html', {'formset' : formset},
                                  context_instance = RequestContext(request))
    else:
        formset = PruebaFormSet(request.POST)
        # dumb tests, just to know if validating
        if formset.is_valid():
            return HttpResponse('0')
        else:
            return HttpResponse('1')

In my template, i'm just calling the {{ form.cliente }} method which renders the combo field, however, I want to be able to choose an empty (labeled "------") value, as the FK is optional... but when the form gets submitted it doesn't validate.

Is this normal behaviour? How can i make this field to skip required validation?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眉目亦如画i 2024-09-08 09:26:34

尝试在 cliente 中添加 blank = True

cliente = models.ForeignKey(Cliente, null = True, blank = True)

null 与数据库相关,blank 用于前端验证。

Try adding blank = True to cliente:

cliente = models.ForeignKey(Cliente, null = True, blank = True)

null is database related, blank is for front-end validation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文