Как я могу сохранить данные из метода POST в базу данных из forms.Model? - PullRequest
0 голосов
/ 11 апреля 2019

Так как несколько часов назад я столкнулся с основной проблемой, поэтому я решил задать вопрос после того, как попытался сделать много примеров, но я все еще не могу сохранить данные из моих форм, используя метод POST.

В моих представлениях шаблонов, когда я публикую данные и с моей веб-страницы, в базу данных ничего не попадает, и даже когда я печатаю (request.POST), я ничего не получаю, кажется, что ничего не работает.

Я используюDjango 2.2 последняя версия Django.

Это мои модели:

class AddressDelivery(models.Model):

    billing_profile = models.ForeignKey(BillingProfile, on_delete=models.CASCADE)
    first_name      = models.CharField(max_length=120)
    last_name       = models.CharField(max_length=120)
    address_type    = models.CharField(max_length=120, choices=ADDRESS_TYPES)
    address_line_1  = models.CharField(max_length=120)
    address_line_2  = models.CharField(max_length=120, null=True, blank=True)
    city            = models.CharField(max_length=120)
    phone           = PhoneNumberField(unique=True)
    country         = models.CharField(max_length=120, choices=COUNTRIES, default=current_country)
    state_or_department  = models.CharField(max_length=120)
    postal_code     = models.CharField(max_length=120)

    def __str__(self):
        return str('{}'.format(self.billing_profile))

Это мои формы:

class AddressForm(forms.ModelForm):

    class Meta:
        model = AddressDelivery
        fields = [
            'first_name',
            'last_name',
            'phone',
            #'billing_profile',
            #'address_type',
            'address_line_1',
            'address_line_2',
            'city',
            'postal_code',
            'state_or_department',
            'country',
        ]
        widgets = {
            'first_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'First Name'}),
            'last_name': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Last Name'}),
            'postal_code': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'postal code'}),
            'state_or_department': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'state or department'}),
            'city': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'city'}),
            'address_type': forms.Select(attrs={'class': 'form-control'}),
            'address_line_1': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'address line 1'}),
            'address_line_2': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'address line 2'}),
            'country': forms.Select(attrs={'class': 'form-control'}),
            'address_type': forms.Select(attrs={'class': 'form-control'}),
            'phone': forms.TextInput(attrs={'class': 'form-control', 'placeholder': 'Phone number with country code'}),

        }

А вот мои взгляды на обработку форм:

def checkout_address_create_view(request):
    form = AddressForm(request.POST or None)
    context = {
        "form": form
    }
    next_ = request.GET.get('next')
    next_post = request.POST.get('next')
    redirect_path = next_ or next_post or None
    if form.is_valid():
        print(request.POST)
        instance = form.save(commit=False)
        billing_profile, billing_profile_created = BillingProfile.objects.new_or_get(request)
        if billing_profile is not None:
            address_type = request.POST.get('address_type', 'shipping')
            instance.billing_profile = billing_profile
            instance.address_type = request.POST.get('address_type', 'shipping') 
            instance.save()

        else:
            print("Error here")
            return redirect("checkout")

        if is_safe_url(redirect_path, request.get_host()):
            return redirect(redirect_path)
        else:
            return redirect("checkout")
    return redirect("checkout")

И это моя форма шаблона:

 <form method="POST" action="{% if action_url %}{{ action_url }}{% else %}{% url 'login' %}{% endif %}"> {% csrf_token %}
{% if next_url %}
<input type="hidden" name="next" value="{{ next_url }}" />
{% endif %}

{% if address_type %}
<input type="hidden" name="address_type" value="{{ address_type }}" />
{% endif %}
{{ form.as_p }}

Submit

В этом представлении регистра использовался тот же метод и он работает нормально,

def register(request):
  # get_variable_country()
  # print(get_variable_country())
  get_variable_model()
  print(get_variable_model())

if request.user.is_authenticated:
    return redirect('index')
elif request.user.is_authenticated and (request.user.is_admin == True):
    return redirect('index')
else:

    form = RegisterForm(request.POST or None)
    context = {
        'form': form
        }
    if form.is_valid():
        form.save() 
        return redirect('thanks')
    return render(request, 'accounts/register.html', context)

Пожалуйста, помогите спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...