簡體   English   中英

在數據庫中保存表單數據

[英]Saving form data in the database

您好,我是 Django 的新手,我已經創建了一個可用的房屋過帳表格,但我無法將輸入的數據存儲在數據庫中。 我使用了 if form.is_valid 和 form.cleaned_data 我需要幫助我的代碼:

視圖.py

def public(request):
form = PublicationForm()
if request.method == 'POST':
    form = PublicationForm(request.POST, request.FILES)
    if form.is_valid():
        first_name=form.cleaned_data['first_name']
        last_name=form.cleaned_data['last_name']
        agency_name=form.cleaned_data['agency_name']
        city=form.cleaned_data['city']
        categories=form.cleaned_data['categories']
        status=form.cleaned_data['status']
        phone_number_1=form.cleaned_data['phone_number_1']
        phone_number_2=form.cleaned_data['phone_number_2']
        description=form.cleaned_data['description']
        image_one=form.cleaned_data['image_one']
        pub = Publication.objects.create(
            first_name=first_name,
            last_name=last_name,
            agency_name=agency_name,
            city=city,
            categories=categories,
            status=status,
            phone_number_1=phone_number_1,
            phone_number_2=phone_number_2,
            description=description,
            image_one=image_one
        )
        pub.save()
    return HttpResponse("Publication réussie")
else:
    form = PublicationForm()

return render(request, 'pub/public.html', {'form':form})

這是我使用 django-crispy-form 模塊的模板視圖

public.html

<form method="POST" enctype="multipart/form-data " class="form-block ">
                {% csrf_token %} {{ form.non_field_errors }}
                <div class="form-row">
                    <div class="col-md-4 mb-3">
                        {{ form.first_name.errors }}
                        <label for="{{ form.first_name.id_for_label }} "></label> {{ form.first_name|as_crispy_field }}
                    </div>
                    <div class="col-md-4 mb-3">
                        {{ form.last_name.errors }}
                        <label for="{{ form.last_name.id_for_label }} "></label> {{ form.last_name|as_crispy_field }}
                    </div>
                    <div class="col-md-4 mb-3">
                        {{ form.agency_name.errors }}
                        <label for="{{ form.agency_name.id_for_label }} "></label> {{ form.agency_name|as_crispy_field }}
                    </div>
                    <div class="col-md-4 mb-3">
                        {{ form.city.errors }}
                        <label for="{{ form.city.id_for_label }} "></label> {{ form.city|as_crispy_field }}
                    </div>
                    <div class="col-md-4 mb-3">
                        {{ form.categories.errors }}
                        <label for="{{ form.categories.id_for_label }} "></label> {{ form.categories|as_crispy_field }}
                    </div>
                    <div class="col-md-4 mb-3">
                        {{ form.status.errors }}
                        <label for="{{ form.status.id_for_label }} "></label> {{ form.status|as_crispy_field }}
                    </div>
                    <div class="col-md-6 mb-3">
                        {{ form.phone_number_1.errors }}
                        <label for="{{ form.phone_number_1.id_for_label }} "></label> {{ form.phone_number_1|as_crispy_field }}
                    </div>
                    <div class="col-md-6 mb-3">
                        {{ form.phone_number_2.errors }}
                        <label for="{{ form.phone_number_2.id_for_label }} "></label> {{ form.phone_number_2|as_crispy_field }}
                    </div>
                    <div class="col-md-12 mb-3">
                        {{ form.description.errors }}
                        <label for="{{ form.description.id_for_label }} "></label> {{ form.description|as_crispy_field }}
                    </div>
                    <div class="col-md-6 mb-3">
                        {{ form.image_one.errors }}
                        <label for="{{ form.image_one.id_for_label }} "></label> {{ form.image_one|as_crispy_field }}
                    </div>
                </div>
                <button type="submit " class="btn btn-outline-primary btn-lg btn-block">Publier</button>
            </form>

這是一個 ModelForm 在我的表單中我有:

forms.py

class PublicationForm(forms.ModelForm):
class Meta:
    model = Publication
    fields = ["first_name",
        "last_name",
        "agency_name",
        "city",
        "categories",
        "status",
        "phone_number_1",
        "phone_number_2",
        "description",
        "image_one"
    ]
    widgets = {
        'first_name': TextInput(attrs={'class': 'form-control'}),
        'last_name': TextInput(attrs={'class': 'form-control'}),
        'agency_name': TextInput(attrs={'class': 'form-control'}),
        'city': Select(attrs={'class': 'form-control', 'placeholder':'Choisir une ville'} ),
        'categories': Select(attrs={'class': 'form-control', 'placeholder':'Choisir une catégorie'}),
        'status': Select(attrs={'class': 'form-control', 'placeholder':'Choisir un statut'}),
        'phone_number_1': NumberInput(attrs={'class': 'form-control'}),
        'phone_number_2': NumberInput(attrs={'class': 'form-control'}),
        'description': Textarea(attrs={'class': 'form-control'}),
        'image_one': FileInput(attrs={'class': 'form-control'}),
    }

您有一個 model 表格,它是一個連接到您的 model 的表格。 您正在做的是取出所有用戶輸入並嘗試用它創建一個 object。 https://docs.djangoproject.com/en/3.1/topics/forms/modelforms/#the-save-method

在我的示例中,您只需保存連接到 model 的表單輸入。


編輯:將消息添加到views.py重定向需要輸入urls.py中的路徑名稱

消息鏈接: https://simpleisbetterthancomplex.com/tips/2016/09/06/django-tip-14-messages-framework.html

https://docs.djangoproject.com/en/3.1/ref/contrib/messages/

重定向鏈接: https://docs.djangoproject.com/en/3.1/topics/http/shortcuts/#redirect

#Views.py
from django.contrib import messages
from django.shortcuts import redirect

    def public(request):
        form = PublicationForm()
        if request.method == 'POST':
            form = PublicationForm(request.POST, request.FILES)
            if form.is_valid():
                form.save()
                messages.success(request, 'Your password was updated successfully!')
            return redirect('index')
        else:
            form = PublicationForm()
        
        return render(request, 'pub/public.html', {'form':form})

#template
{% if messages %}
  <ul class="messages">
    {% for message in messages %}
      <li class="{{ message.tags }}">{{ message }}</li>
    {% endfor %}
  </ul>
{% endif %}

我會建議這樣的事情:

def public(request):
    form = PublicationForm(request.POST or None, request.FILES or None)
    if form.is_valid():    
        pub = form.save()
        return HttpResponse("Publication réussie")

    return render(request, 'pub/public.html', {'form':form})

暫無
暫無

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

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