Я пытаюсь передать объект через форму, но он не работает для меня. В моделях моя модель Subscription имеет ссылку на модель Customer, и в любое время, когда я хочу создать или обновить подписку, мне нужно включить связанного с ней Customer.Передача объекта через Django Forms
class Subscription(StripeObject):
sub_user = models.ForeignKey(Customer)
creation_date = models.DateTimeField(auto_now_add=True)
На мой взгляд, я получаю все, что нужно, и в моем шаблоне, я пытаюсь передать объект клиента с моей точки зрения, как одна из форм полей ввода.
def profile(request):
user = request.user.get_full_name()
menu_group = Recipes.objects.filter(today=True).order_by('-price')
apartments = Apartment.objects.order_by('apartment')
plans = Plan.objects.order_by('amount')
try:
customer = Customer.objects.get(user=user)
except Customer.DoesNotExist:
customer = Customer(stripe_id=user, user=user, account_balance=0, currency="usd")
customer.save()
customer = Customer.objects.get(user=user)
try:
subscription = Subscription.objects.get(sub_user=customer)
except Subscription.DoesNotExist:
subscription = None
try:
charge_id = Subscribe.objects.get(user=user)
except Subscribe.DoesNotExist:
charge_id = None
if request.method == "POST":
form = AddSubscription(request.POST)
if form.is_valid(): # charges the card
if subscription is None:
form.save()
return HttpResponseRedirect('/subscription/charge/')
elif subscription.sub_change(form.cleaned_data['weekly_plan']):
form.save()
subscription.checked_out = True
return HttpResponseRedirect('/profile/')
else:
form.save()
subscription.checked_out = False
return HttpResponseRedirect('/subscription/charge/')
else:
return HttpResponseRedirect('/profile/error/')
else:
form = AddSubscription()
return render_to_response("profile.html", {'customer': customer, 'menu_group_list': menu_group, 'subscription': subscription, 'charge_id': charge_id, 'apartments': apartments, 'plans': plans}, context_instance=RequestContext(request))
Шаблон: profile.html
{% with cus=customer %}
<input type="hidden" id="sub_user" name="sub_user" value="{{cus}}">
{% endwith %}
Форма:
class AddSubscription(forms.ModelForm):
sub_user = forms.ModelChoiceField(queryset=Customer.objects.none())
class Meta:
model = Subscription
fields = ['sub_user']
def __init__(self, *args, **kwargs):
super(AddSubscription, self).__init__(*args, **kwargs)
форма, по-видимому, не действует. Я уже пробовал использовать ModelChoiceField, который не работал, и я могу подтвердить, что объекты Subscription и Customer, с которыми я работаю, существуют. Есть идеи? Кто-нибудь видел эту проблему раньше? Как передать объект ForeignKey Customer через форму?
Так что позвольте мне убедиться, что я понимаю. Я перестаю передавать объект через HTML, и я удаляю ModelChoiceField из моей формы. Вместо этого я получаю объект клиента в своем представлении, а в POST я устанавливаю form.field ['sub_user'] = клиент. Верный? Что мне нужно делать с GET? – acs254
Благодарим вас за помощь. Я понял это на основе ваших комментариев выше. – acs254