我有两个模型公司和广告系列。我需要在它们之间建立关系。我认为我的模特很好。
公司/ 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 :(得分: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中注册公司来做到这一点,但我不相信会话不会出现他们自己的问题。