使用基于django类的视图

时间:2016-10-10 17:27:21

标签: django django-models django-forms

我有两个模型公司和广告系列。我需要在它们之间建立关系。我认为我的模特很好。

公司/ 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来填充广告系列模型?这样做最安全,最好的做法是什么?

1 个答案:

答案 0 :(得分: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(r'^campaign/(?P<pk>\d+)/create/$', CampaignCreateView.as_view()...

不确定我是否喜欢URL中的pk,因为它可以被顶住。这就是我在公司模型上过滤用户ID以确保数据来自所有者的原因。

我想通过在会话ID中注册公司来做到这一点,但我不相信会话不会出现他们自己的问题。