J'essaie de créer un objet dans Django en utilisant les bibliothèques de classes et de vues basées sur une classe standard. Trois champs de mon formulaire dépendent d'une variable de domaine capturée à partir du modèle d'URL. Mes questions sont les suivantes:Django: Accès aux variables d'URL dans les vues et les formulaires basés sur une classe
- Comment puis-je accéder
domain
au seinCreateSubscription
afin que je puisse mettreSubscription.site
-Site.objects.filter(domain=domain)[0]
? - Comment puis-je limiter les champs déroulants rendus de
CreateSubscriptionForm
de sorte queplan
affiche uniquementSubscriptionPlan.objects.filter(site=Site.objects.filter(domain=domain)[0])
etpayment_profile
est limité àPaymentProfile.objects.filter(user=request.user)
?
Par souci de clarté, le domaine dans r'^subscribe/(?P<domain>\w+\.\w+)/$'
est sans rapport avec le domaine de mon propre site. Le cadre django.contrib.sites
ne m'aidera pas ici. Merci d'avance de m'avoir aidé à démêler toutes ces méthodes CBV. :)
Le modèle d'URL est:
from django.conf.urls import patterns, url
from accounts.views import *
url(r'^subscribe/(?P<domain>\w+\.\w+)/$',
CreateSubscription.as_view(), name='subscribe_to_site'),
)
La vue en question est:
from accounts.forms import *
from accounts.models import *
class CreateSubscription(CreateView):
model = Subscription
form_class = CreateSubscriptionForm
def form_valid(self, form):
form.instance.user = self.request.user
return super(CreateSubscription, self).form_valid(form)
Les modèles concernés sont les suivants:
from django.conf import settings
from django.contrib.sites.models import Site
from django.db import models
class PaymentProfile(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
class SubscriptionPlan(models.Model):
site = models.ForeignKey(Site)
name = models.CharField(max_length=40)
class Subscription(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
site = models.ForeignKey(Site)
plan = models.ForeignKey(SubscriptionPlan)
payment_profile = models.ForeignKey(PaymentProfile)
Et, enfin, ma forme est :
from accounts.models import *
class CreateSubscriptionForm(forms.ModelForm):
class Meta:
model = Subscription
exclude = ('user', 'site',)
Impressionnant. Fonctionne comme un charme. Merci, Ngenator! – Wes
Pas de problème, content de pouvoir aider. – Ngenator