Django модель формы с множественным селектором не может сохранить inti DB - PullRequest
0 голосов
/ 20 января 2020

У меня есть вопрос, как показано ниже. Я застрял в этой проблеме на некоторое время.

Я создаю заказ в форме модели django, в которой клиент использует корзину для покупок, чтобы заполнить информацию о своей транзакции.

Ниже приведена моя структура кода:

## models.py
from django.db import models

class Order(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField()
    address = models.CharField(max_length=250)
    postal_code = models.CharField(max_length=20)
    city = models.CharField(max_length=10)
## forms.py
from django import forms
from .models import Order
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout,Div,Field
class OrderCreateForm(forms.ModelForm):
    class Meta:
        model = Order
        fields = ['first_name', 'last_name', 'email', 'address', 'postal_code','city']
    def __init__(self,*args,**kwargs):
        super(OrderCreateForm, self).__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper = Layout(
            Div(Field('city') , id="twzipcode_ADV"),
        )
## views.py

from .forms import OrderCreateForm
from .models import OrderItem

def order_create(request):
    cart = Cart(request)
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            order = form.save()
## .html
    <form action="." method="post">
        {% csrf_token %}
        {% for field in form %}
            {% if field is form.city or field is form.county%}
              <div id="twzipcode_ADV"></div>
            {% else %}
              {{field.name}}
              {{field}}
            {% endif %}
        {% endfor %}
        {% buttons %}
            <button type="submit" class="btn btn-success btn-product">
                <span class="glyphicon glyphicon-shopping-cart"></span> Place order
            </button>
        {% endbuttons %}
    </form>
 <script src='https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js'></script>
 <script src='https://cdn.jsdelivr.net/npm/jquery-twzipcode@1.7.14/jquery.twzipcode.min.js'></script>
 <script src="{%static "js/orders/create.js" %}"></script>
## create.js
$("#twzipcode_ADV").twzipcode({
zipcodeIntoDistrict: true, 
css: ["city form-control", "town form-control"], 
countyName: "city", 
districtName: "town" 
});

И веб-сайт может быть показан на рисунке ниже. Как я показываю в красной области angular. У меня вопрос, когда я нажимаю кнопку заполнителя, второй селектор не будет сохранен в поле города, которое я уже определил в models.py. Однако он хранит только первый селектор. Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 20 января 2020

Если вам нужно добавить дополнительное значение поля, которое динамически появляется в качестве значения формы, вы можете добавить его в views.py:

from .forms import OrderCreateForm
from .models import OrderItem

def order_create(request):
    cart = Cart(request)
    if request.method == 'POST':
        form = OrderCreateForm(request.POST)
        if form.is_valid():
            country = form.cleaned_data.get("country")
            order = form.save(commit=False)
            order.country = country
            order.save()

Эта модель должна иметь это поле в списке полей. И нужно сделать миграцию. В противном случае значение поля не будет сохранено, скорее это вызовет ошибку.

...