成功付款django后更新数据库

时间:2015-03-20 06:54:35

标签: python django paypal

我有一个名为'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中以及如何进行?

2 个答案:

答案 0 :(得分:0)

我建议添加一个包含用户ID的自定义字段,并在paypal通知您时将其恢复。

请参阅下面的自定义: https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNandPDTVariables/

答案 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中。