允许用户使用Django Stripe(dj-stripe)仅使用非付费帐户创建一定数量的对象



我目前有一个个人CRM应用程序,允许用户创建联系人,然后为这些联系人创建日志。下面是代码的外观。

views.py

class CreateContact(LoginRequiredMixin, CreateView):
model = Contact
template_name = 'network/contacts_list.html'
form_class = ContactForm
def get_success_url(self):
return reverse('home')
def form_valid(self, form):
form.instance.contact_owner = self.request.user
return super(CreateContact, self).form_valid(form)
def get_context_data(self, **kwargs):
context = super(CreateContact, self).get_context_data(**kwargs)
context['contacts'] = Contact.objects.filter(contact_owner=self.request.user)
return context

class CreateContactLog(LoginRequiredMixin, CreateView):
model = ContactLog
template_name = 'network/contact_detail.html'
fields = ('log_type','body',)
def get_success_url(self):
return reverse('contact-detail', kwargs={'id':self.kwargs['id']})
def form_valid(self, form):
current_contact = Contact.objects.get(contact_owner=self.request.user, contact_id=self.kwargs['id'])
form.instance.contact_owner = self.request.user
form.instance.contact_id = current_contact
return super(CreateContactLog, self).form_valid(form)
def get_context_data(self, **kwargs):
current_contact = Contact.objects.get(contact_owner=self.request.user, contact_id=self.kwargs['id'])
context = super(CreateContactLog, self).get_context_data(**kwargs)
context["contact_info"] = current_contact
context["first_name"] = current_contact.first_name
context["id"] = current_contact.contact_id
context['log_entries'] = ContactLog.objects.filter(contact_owner=self.request.user, contact_id=current_contact)
return context

一切都很完美。

现在我想开始接受付款,我想将我的应用程序与 Stripe 集成。最好的方法是使用第三方软件包 dj-stripe。

我想要 2 个计划,免费和付费。我想允许免费计划用户创建最多 10 个联系人。阅读 django-stripe 的文档,我发现我可以使用基于类的视图,但我不明白我将如何限制一定数量的对象创建。

以下是我目前的想法:

也许创建两个类,
  • 其中一个允许创建三个对象,另一个类允许无限制但需要付款。

  • 也许我错过的文档中有一个设置可以帮助解决这个问题。

解决此问题的最佳方法是什么?

如果您需要更多信息,请告诉我。

提前非常感谢你。

最好 拉苏尔

我会创建一个 util 函数来检查:

  1. 用户有多少联系人
  2. 用户是否有付费计划

检查 1 是对contact_owner上的反向关系的直接计数。

DJ-stripe 具有您可以在检查 2 中使用的Customer.get_or_create()Customer.has_active_subscription()方法。

然后,您可以在form_valid中检查此实用程序的结果。如果结果为 false,则可以向窗体添加错误,然后调用form_invalid

希望有帮助,

亚历克斯

相关内容

  • 没有找到相关文章

最新更新