#python #mysql #django
#python #mysql #django
Вопрос:
Я пытаюсь следить за этим проектом с открытым исходным кодом, чтобы узнать больше о Django и crispy. Для этого я пытаюсь расширить этот проект с открытым исходным кодом
Я скачал проект с GitHub и запустил его :). Однако models.py отсутствует, и я подумал, что попробую добавить его и поместить данные HTML-формы в мою локальную базу данных mysql. Итак, в основном я пытаюсь расширить этот существующий код. Я смог добавить models.py и создайте таблицу в mysql.
Проблема: если я нажимаю кнопку отправки, данные в mysql не отображаются. Я думаю, я понял, что мне нужна какая-то команда «save ()». Но где? Я также получаю эту ошибку: «POST / form / 4 / HTTP / 1.1″ 302 0»
Я нашел публикации в Google о кодлинах в forms.py и view.py . Но либо это не разрешило проблему, либо вызвало ошибку. Есть идеи, как это преодолеть?
models.py
from django.db import models
from mysite.core.choice import STATES
class Address(models.Model):
email = models.CharField(max_length=100, blank=True)
password = models.CharField(max_length=100, blank=True)
address_1 = models.CharField(max_length=100, blank=True)
address_2 = models.CharField(max_length=100, blank=True)
city = models.CharField(max_length=100, blank=True)
zip_code = models.CharField(max_length=100, blank=True)
state = models.IntegerField(default=1, choices=STATES, blank=True)
check_me_out = models.BooleanField(default=False)
forms.py —> Также с комментариями о том, что я изменил против оригинал
from django import forms
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, Div, Submit, Row, Column, Field
from .choice import STATES
from .models import Address
class AddressForm(forms.Form):
Model = Address ####new added by me
email = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Email'}))
password = forms.CharField(widget=forms.PasswordInput())
address_1 = forms.CharField(label='Address', widget=forms.TextInput(attrs={'placeholder': '1234 Main St'}))
address_2 = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Apartment, studio, or floor'}))
city = forms.CharField()
state = forms.ChoiceField(choices=STATES)
zip_code = forms.CharField(label='Zip')
check_me_out = forms.BooleanField(required=False)
class CrispyAddressForm(AddressForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_method = 'post' ##### new added by me
self.helper.add_input(Submit('submit', 'Sign in')) ##### new added by me
self.helper.layout = Layout(
Row(
Column('email', css_class='form-group col-md-6 mb-0'),
Column('password', css_class='form-group col-md-6 mb-0'),
css_class='form-row'
),
'address_1',
'address_2',
Row(
Column('city', css_class='form-group col-md-6 mb-0'),
Column('state', css_class='form-group col-md-4 mb-0'),
Column('zip_code', css_class='form-group col-md-2 mb-0'),
css_class='form-row'
),
'check_me_out',
#Submit('submit', 'Sign in') ##### originally in there but commented out by me
)
class CustomCheckbox(Field):
template = 'custom_checkbox.html'
class CustomFieldForm(AddressForm):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.layout = Layout(
Row(
Column('email', css_class='form-group col-md-6 mb-0'),
Column('password', css_class='form-group col-md-6 mb-0'),
css_class='form-row'
),
'address_1',
'address_2',
Row(
Column('city', css_class='form-group col-md-6 mb-0'),
Column('state', css_class='form-group col-md-4 mb-0'),
Column('zip_code', css_class='form-group col-md-2 mb-0'),
css_class='form-row'
),
CustomCheckbox('check_me_out'),
Submit('submit', 'Sign in')
)
views.py
from django.views.generic import FormView, TemplateView
from django.urls import reverse_lazy
from .forms import AddressForm, CrispyAddressForm, CustomFieldForm
class AddressFormView(FormView):
form_class = AddressForm
success_url = reverse_lazy('success')
class CrispyAddressFormView(FormView):
form_class = CrispyAddressForm
success_url = reverse_lazy('success')
template_name = 'crispy_form.html'
class CustomFieldFormView(FormView):
form_class = CustomFieldForm
success_url = reverse_lazy('success')
template_name = 'crispy_form.html'
class SuccessView(TemplateView):
template_name = 'success.html'
пожалуйста, дайте мне знать, если вы хотите увидеть больше кода, подобного html или около того.
Комментарии:
1. Вместо форм. Использование формы
forms.ModelForm
. и вместо FormView используйтеCreateView
2. Это помогло наверняка
Ответ №1:
хорошо, это работает @Абдул Азиз Баркат
но только если я добавлю
class Meta:
model = Address
fields = ('email', 'password', 'address_1', 'address_2', 'city', 'state', 'zip_code', 'check_me_out')
Но теперь мои определения из
класса AddressForm(forms.Form)
исчезли.
Как я могу их вернуть
Комментарии:
1. Вы можете просто сохранить свои определения полей в классе. Это будет работать должным образом.
2. Сохраните блок и мета-класс. Кроме того, почему вы публикуете несколько ответов вместо того, чтобы редактировать свой ответ. Почему вы публикуете вопрос в качестве ответа? Также удалите ту модель, которую вы написали в своей первой (вне мета, что бы форма делала с этим атрибутом в любом случае?)
3. я попробовал еще раз, и команда and сработала. что касается ответов, я просто не знал. Будем рассматривать это в будущем