標準のクラスベースのビューとフォームライブラリを使用して、Djangoでオブジェクトを作成しようとしています。私のフォームの3つのフィールドは、URLパターンからキャプチャされたドメイン変数に依存しています。私の質問は次のとおりです。
- に設定できるように、
domain
内にアクセスするにはどうすればよいですか?CreateSubscription
Subscription.site
Site.objects.filter(domain=domain)[0]
- 表示のみに制限される
CreateSubscriptionForm
ように、レンダリング元のドロップダウンフィールドを制限するにはどうすればよいですか?plan
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', )