簡體   English   中英

form.save()之前的行未保存正確的值

[英]Lines before form.save() are not saving the right values

我有一個帶有模型表單的視圖, ModelForm並不真正包含模型中的所有字段。 其他字段我在form.save()之前使用了form.field = value的方法,但是所有這些字段都保存為默認值。 沒有人會試着給予價值。 這是代碼:

def PostAd(request):
    ad_post_form = AdPostForm()
    if request.user.is_authenticated:
        obj = Account.objects.get(user=request.user)
        if request.method == "POST":
            ad_post_form = AdPostForm(request.POST, request.FILES)
            if ad_post_form.is_valid():
                ad_post_form.created_by = request.user
                if obj.role == 'admin':
                    ad_post_form.is_active = True
                ad_post_form.save()
                return redirect('home')
        else:
            ad_post_form = AdPostForm(request.POST, request.FILES)
    else:
        if request.method == "POST":
            ad_post_form = AdPostForm(request.POST, request.FILES)
            if ad_post_form.is_valid():
                otp_number = random.randint(100000, 999999)
                ad_post_form.otp = otp_number
                ad_post_form.is_activated = False
                ad_post_form.save()
                current_id = ad_post_form.id
                current_contact_email = request.POST.get('contact_email')
                email_url_active = str(settings.URL_LOCAL) + 'new_ad/adidnumberis' + str(
                    current_id) + '/needactivate/activate/' + str(otp_number) + '/'
                email_msg = "Please Confirm adding the Ad to Jehlum. Click link " + email_url_active
                email = EmailMessage('Active Email', email_msg, to=[current_contact_email])
                email.send()
                return redirect('home')

            else:
                ad_post_form = AdPostForm()

    context = {
        'ad_post_form': ad_post_form,
    }

    return render(request, 'pages/post-ad.html', context)

問題是ad_post_form.is_active = True被保存為False(默認值),同時ad_post_form.otp = otp_number被保存為0(默認值),我需要提供在此分配的具體值。

您需要獲取模型實例並在那里設置屬性。 您可以通過使用commit = False調用save來做到這一點。

if ad_post_form.is_valid():
    ad_post = ad_post_form.save(commit=False)
    ad_post.created_by = request.user
    ...
    ad_post.save()

暫無
暫無

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

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