0
我想在使用基于标准类的视图和表单库的Django中创建一个对象。我的表单中的三个字段依赖于从URL模式捕获的域变量。我的问题是:Django:在基于类的视图和表单中访问URL变量
- 如何访问
domain
内CreateSubscription
,这样我可以设置Subscription.site
到Site.objects.filter(domain=domain)[0]
? - 如何限制从
CreateSubscriptionForm
呈现的下拉字段,以便仅显示SubscriptionPlan.objects.filter(site=Site.objects.filter(domain=domain)[0])
而payment_profile
仅限于PaymentProfile.objects.filter(user=request.user)
?
为了清晰起见,r'^subscribe/(?P<domain>\w+\.\w+)/$'
中的域与我自己网站的域无关。 django.contrib.sites
框架不会帮助我在这里。
在此先感谢您帮助我解开所有这些CBV方法。 :)
URL模式是:
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'),
)
有问题的看法是:
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)
相关型号有:
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)
最后,我的形式是:
from accounts.models import *
class CreateSubscriptionForm(forms.ModelForm):
class Meta:
model = Subscription
exclude = ('user', 'site',)
太棒了。奇迹般有效。谢谢,Ngenator! – Wes 2013-03-19 23:54:17
没问题,很高兴我能帮上忙。 – Ngenator 2013-03-20 00:26:10