我有一个名为'Exhibition'的模型,在我填写表格后,我可以让用户创建一个新的展览/活动,他们被要求支付一些金额,并被重定向到支付网关(Paypal按照{{3} }),成功付款后,我想更新我的“展览”表,仅为已付款的用户,请求用户在创建活动前登录,我也在用我的数据库中的表格保存用户。
这是我保存表单的观点:
def new_event(request):
form = NewEventForm(request.POST or None)
if form.is_valid():
save_it = form.save(commit=False)
save_it.user = request.user
save_it.save()
return render_to_response('new_event.html',locals(), context_instance=RequestContext(request))
和我的模特:
class Exhibition(models.Model):
user = models.ForeignKey(User, blank=True, null = True)
Type = models.ForeignKey('home.Type')
Category = models.ForeignKey('home.Category')
Country = models.ForeignKey('home.Country')
City = models.ForeignKey('home.City')
Event_name = models.CharField(max_length = 250)
Video_url = models.URLField(blank = True)
Event_start_date = models.DateField(blank = False)
Event_end_date = models.DateField(blank = False)
Discription = RichTextField(blank = False)
Contact_person = models.CharField(max_length=50,blank = True )
Company = models.CharField(max_length = 100,blank = True)
Company_website = models.URLField(blank = True)
Email = models.EmailField(blank = True)
Event_website = models.URLField(blank = True)
Event_email = models.EmailField(blank = True)
Venue = models.CharField(max_length = 250, blank = False)
Address = models.CharField(max_length = 250, blank = False)
Paid = models.IntegerField(max_length=2, default='0')
def __unicode__(self):
return '%s' % self.Event_name
@permalink
def get_absolute_url(self):
return ('view_category', None, { 'slug': self.Event_name })
如果我使用django-paypal视图,我将能够处理付款,但我不知道如何获得正确的'展览 - id'来更新数据库,我应该将其存储在cookie中以及如何进行?
答案 0 :(得分:0)
我建议添加一个包含用户ID的自定义字段,并在paypal通知您时将其恢复。
答案 1 :(得分:0)
我会尝试将一个post_save信号处理程序添加到django-paypal的模型PayPalStandardBase中,然后使用交易记录的字段来识别您的展览记录。您可以使用模型的主键字段并告诉paypal它是您的交易的项目编号,或者只是添加您想要用作公共标识符的任何其他唯一字段。
在这里查看模型:
https://github.com/spookylukey/django-paypal/blob/master/paypal/standard/models.py
信号处理程序看起来像:
@receiver(post_save, sender=PayPalStandardBase)
def mark_as_paid(sender, instance=None, created=False, **kwargs):
if created:
e = Exhibition.objects.get(pk=instance.item_number)
e.Paid = ...
e.save()
你可以将它添加到你的models.py或者你可以在其他地方导入的signals.py中。