2016-10-10 16 views
0

私は2つのモデルの会社とキャンペーンを持っています。私はそれらの間に関係を作り出す必要があります。私のモデルは大丈夫だと思います。djangoクラスベースのビューを使用して2つのモデル間の関係を作成

企業/ model.py

class Company(models.Model): 

    class Meta: 
     verbose_name_plural = "companies" 

    user = models.ForeignKey(settings.AUTH_USER_MODEL) 
    title = models.CharField(blank=False, max_length=128, default='') 
    slug = models.SlugField(blank=True, unique=True) 
    archived = models.BooleanField(default=False) 
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False) 

キャンペーン/ models.py

class Campaign(models.Model): 

    class Meta: 
     verbose_name_plural = "campaigns" 

    company = models.ForeignKey('companies.Company', on_delete=models.CASCADE,) 
    title = models.CharField(blank=False, max_length=128, default='') 
    slug = models.UUIDField(default=uuid.uuid4, blank=True, editable=False) 

    def __str__(self): 
     return str(self.title) 

キャンペーン/ forms.py

class CampaignForm(forms.ModelForm): 
    class Meta: 
     model = Campaign 
     fields = ['title','description','archived'] 

キャンペーン/ views.py

class CampaignCreateView(SubmitBtnMixin, CreateView): 
    model = Campaign 
    company = None 
    form_class = CampaignForm 
    submit_btn = "Add Campaign" 
    template_name = "form.html" 

キャンペーン/ urls.py

url(r'^campaign/create/$', CampaignCreateView.as_view(), name='campaign-create'), 

私の質問です、私は会社のPKを拾うんし、どのように新しいキャンペーンを作成するときキャンペーンモデルに値を設定しますか?これを行うための最も安全でベストプラクティスは何ですか?

答えて

0

私は解決策を見つけましたが、ベストプラクティスの入力を依然として希望しています。

私は私のCampaignCreateView

def form_valid(self, form): 
    company = get_object_or_404(Company, id=self.kwargs.get('pk'), user_id=self.request.user.id) 
    form.instance.company_id = company.id 
    return super(CampaignCreateView, self).form_valid(form) 

にこれを追加し、私はに私のURLを変更:

url(r'^campaign/(?P<pk>\d+)/create/$', CampaignCreateView.as_view()... 

ない、それはジャッキすることができますので、私はURLでPKを気に入っていることを確認してください。これは、データが所有者から来ていることを確認するために、会社のモデルでユーザーIDをフィルタリングする理由です。

私はセッションIDに会社を登録することでこれを行うと考えましたが、セッションが自分の問題を提示しないとは確信していません。

関連する問題