簡體   English   中英

如何使用 django 表單設置 None 值

[英]how to set a None value with django form

我有一個帶有谷歌 map 的表格,當用戶不點擊 map 我需要將緯度和經度作為無發送到 views.py,這是 views.py:

 if request.method == "POST":
    if request.user.is_authenticated:

        if  True:
            form = CreatMeetingForm(request.POST,request.FILES)
            print(request.POST)
            
            if form.is_valid():
                if 'id' in request.POST:
                   
                    obj= get_object_or_404(Meeting, id=request.POST.get('id'))
                    form = CreatMeetingForm(request.POST or None,request.FILES or None, instance= obj)
                    meeting= form.save(commit= False)
                    members = form.cleaned_data['members_email']
                   
                    try:
                        meeting.lat= round(form.cleaned_data['lat'],14)
                        meeting.lng = round(form.cleaned_data['lng'],14)
                    except :
                        meeting.lat= None
                        meeting.lng = None
                        
                    meeting.host = request.user
                    update = True
                    meeting.save()
                    
                else :
                    
                    meeting=form.save(commit=False)
                    members = form.cleaned_data['members_email']
                    try:
                        meeting.lat= round(form.cleaned_data['lat'],14)
                        meeting.lng = round(form.cleaned_data['lng'],14)
                    except :
                        meeting.lat= None
                        meeting.lng = None
                        
                    meeting.host = request.user
                    update=False
                    meeting.save()
            else:
                print('form not valid')
                form.errors["code"] = 0
                return JsonResponse(form.errors)
    else:
        return HttpResponse('Unauthorized', status=401)

這是我的 model 字段:

lat = models.DecimalField(max_digits=19, decimal_places=16,blank=True,null=True)
lng = models.DecimalField(max_digits=19, decimal_places=16,blank=True,null=True)

當我想創建一個新表單時,我的代碼可以工作,但是在編輯模式下並且我在 requet.POST 中發送 id 時會引發此錯誤:

{"lat": ["Enter a number."], "lng": ["Enter a number."], "code": 0}

看來我在 form.is_valid bcs 中得到了錯誤,我可以看到 print('form not valid') 有什么建議嗎?

將默認值添加到字段定義中可能會有所幫助,如下所示:

lat = models.DecimalField(
    max_digits=19,
    decimal_places=16,
    blank=True,
    null=True,
    default=None
)
lng = models.DecimalField(
    max_digits=19,
    decimal_places=16,
    blank=True,
    null=True,
    default=None
)

編輯:如果這沒有幫助,請分享 CreatMeetingForm 的定義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM