мой проект состоит из двух шагов: 1) вход в базу данных для модели заказа 2) вход в базу данных для профиля транзакции. В то же время 1) будет обновлен внешний ключ до 2)
Я старался сохранить мой view.py как можно более чистым и модифицировал функцию save(). Однако я читал, что это не всегда рекомендуется, и мне было интересно, есть ли у вас какие-либо отзывы о моем подходе ниже или если бы вы сделали это по-другому.
просмотры.py
def checkout_page(request):
session_order_id = request.session['order_id']
if request.POST:
transaction_profile = TransactionProfileModelForm(request, request.POST)
if transaction_profile.is_valid():
t = transaction_profile.save(commit=False)
t.save()
else:
transaction_profile = TransactionProfileModelForm(request)
формы.py
from orders.models import Order
class TransactionProfileModelForm(forms.ModelForm):
email_confirm = forms.EmailField()
class Meta:
model=TransactionProfile
fields = [
'email',
'email_confirm',
'address_line_1',
'address_line_2',
'city',
'country',
'postal_code',
'state'
]
def __init__(self, request, *args, **kwargs):
self.request = request
super(TransactionProfileModelForm, self).__init__(*args, **kwargs)
def save(self, commit=True):
obj = super(TransactionProfileModelForm, self).save(commit=False)
if commit:
obj.save()
request = self.request
session_order_id = request.session['order_id']
o = Order.objects.get(order_id=session_order_id)
o.transaction_profile = obj
o.save()
return obj
commit=False
. - person Daniel Roseman   schedule 04.05.2018if commit
. Но вы проходитеcommit=False
. Так что он никогда не будет выполнен. Почему вы все равно используете commit=False? - person Daniel Roseman   schedule 04.05.2018t = transaction_profile.save(commit=False)
он вызываетt.save()
, а метод save() имеетcommit=True
в качестве значения по умолчанию. - person Nepo Znat   schedule 04.05.2018obj
, который является экземпляром модели. Итак,t.save()
вызывает сохранение модели, а не формы. - person Daniel Roseman   schedule 04.05.2018