not null约束失败错误,即使在传递d时也是如此

2024-03-29 04:42:20 发布

您现在位置:Python中文网/ 问答频道 /正文

即使在从表单传递数据之后,我也收到了NOTNULL约束错误。我使用ajax发布数据。我检查了请求.POST和网络请求选项卡。两者都显示了商店联系人号码中有数据。在

这是我的密码

class ListStore(FormView):
    form_class = StoreForm
    template_name = 'Store/list-store.html'

    def form_invalid(self, form):
        if self.request.is_ajax():
            print('ajax form error', form.errors)
            response = {
                'error': form.errors
            }
            return JsonResponse(response, status=400)
        else:
            return super(ListStore, self).form_invalid(form.errors)

    def form_valid(self, form):
        success_message = "Thank you for listing your store. We Welcome you."
        store, created = Store.objects.get_or_create(merchant=self.request.user)
        if self.request.is_ajax():
            response = {
                'result': success_message
            }
            return JsonResponse(response)
        else:
            message.success(self.request, success_message)
            return self.render_to_response(self.get_context_data())



class Store(models.Model):
    merchant = models.ForeignKey(User, blank=False, null=False)
    token = models.CharField(default=token_generator, max_length=20, unique=True, editable=False)
    name_of_legal_entity = models.CharField(max_length=250, blank=False, null=False)
    pan_number = models.CharField(max_length=20, blank=False, null=False)
    registered_office_address = models.CharField(max_length=200)
    name_of_store = models.CharField(max_length=100)
    email = models.EmailField(blank=False, null=False)
    store_contact_number = models.PositiveIntegerField(blank=False, null=False)


$('.list-store-form').on('submit', function(event) {
    event.preventDefault(); // preventing from the brwoser default behavior for form submission
    var form = $(this);
    console.log(form);
    $.ajax({
        async: true,
        url: form.attr('action'),
        data: form.serialize(),
        type: 'POST',
        dataType: 'json',
        headers: {
            'X-CSRFToken': window.csrf_token
        },

        success: function(data) {
            if (data.form_is_valid) {
                alert('Store Listed');
            }
            // $('.display').html(
            //  "<div class='ui floating message'> <i class='close icon'></i>" + data.result + '</div>'
            // );
        },

错误显示在门店联系人号码中

IntegrityError at /list/store NOT NULL constraint failed: Store_store.store_contact_number

^{pr2}$

形式

class StoreForm(forms.ModelForm):
    class Meta:
        model = Store
        exclude = ('is_active', 'token', 'merchant',)

Tags: storeselfformfalsemessagedatamodelsresponse
1条回答
网友
1楼 · 发布于 2024-03-29 04:42:20

您需要在form_valid方法的开头添加store = form.save(),并去掉store, created = Store.objects.get_or_create(merchant=self.request.user)行。在

编辑:其实没那么简单,因为窗体保存()也将由于未指定merchant字段而失败。您需要重写表单的__init__save方法,以便将其传递给商家。在

比如:

def save(self, merchant, *args, **kwargs):
    commit = kwargs.pop('commit', True)
    kwargs['commit'] = False

    store = super().save(*args, **kwargs)
    store.merchant = merchant
    if commit:
        store.save()
    return store

然后用以下方法称之为:

^{pr2}$

相关问题 更多 >