Python 成功支付django时更新db

Python 成功支付django时更新db,python,django,paypal,Python,Django,Paypal,我有一个名为“展览”的模型,在该模型中,我允许用户在填写表格后创建一个新的展览/活动,他们被要求支付一定金额,并被重定向到支付网关(paypal根据),在成功支付后,我只想为已支付的用户更新我的“展览”表,用户被要求在创建事件之前登录,我还将用户与表单一起保存在我的数据库中 这是我保存表单的视图: def new_event(request): form = NewEventForm(request.POST or None) if form.is_valid():

我有一个名为“展览”的模型,在该模型中,我允许用户在填写表格后创建一个新的展览/活动,他们被要求支付一定金额,并被重定向到支付网关(paypal根据),在成功支付后,我只想为已支付的用户更新我的“展览”表,用户被要求在创建事件之前登录,我还将用户与表单一起保存在我的数据库中

这是我保存表单的视图:

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 view,我将能够处理付款,但我不知道如何获得正确的“展览id”来更新数据库,我是否应该将其存储在Cookie中以及如何执行此操作?

我建议添加一个包含用户id的自定义字段,并在paypal通知您后恢复此字段

请参见下面的自定义设置:

我会尝试向django paypal的模型PayPals标准库添加一个post_save信号处理程序,然后使用交易记录的字段来识别您的展览记录。您可以使用模型的主键字段并告诉paypal这是您的交易项目编号,或者只添加任何其他要用作公共标识符的唯一字段

在这里查看模型:

信号处理程序如下所示:

@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中,然后将其导入其他地方。

我有点困惑,成功付款后,用户将被重定向到另一个页面,那么我如何在那里获取项目编号?我必须将其存储在cookies中吗?不,信号处理程序不是视图。保存事务时会自动触发post_保存处理程序。不管你的观点如何,我还是不知道怎么做。你能告诉我在这种情况下如何完全做到这一点吗?我知道IPN变量,但我不知道如何在django中使用它们,你能给我一个同样的例子吗,这将是很大的帮助。谢谢在回调url中,从请求恢复值:request.POST['customvariablename']