0

我正在开发一个基于 django 的食谱网站,但在自定义后端遇到了障碍。

我收到验证错误 - 当我尝试将我的说明书实例保存在后端时未提供异常。

这是我的后端:

from registration.backends.default import DefaultBackend
from cookbook.models import Cookbook
from django.contrib.auth.models import User
from registration.models import RegistrationProfile

class RecipeekActivationBackend(DefaultBackend):
    def register(self, request, **kwargs):
        new_user = super(RecipeekActivationBackend, self).register(request, **kwargs)
        new_user.save()
        cookbook = Cookbook(name=new_user.first_name, pub_date="12/12/2012", user=new_user)
        print"cookbook"
        cookbook.save()
        return new_user

错误发生在 cookbook.save()

这是我的食谱模型:

class Cookbook(models.Model):
    def __unicode__(self):
        return self.name
    name = models.CharField(max_length=50)
    pub_date = models.DateTimeField('date published')
    user = models.ForeignKey(User, related_name='cookbooks')
    recipes = models.ManyToManyField('Recipe', related_name = 'cookbooks')

我相信这就是我需要提供的所有东西才能获得一点帮助。

先感谢您,

A.库珀

更新:错误是由传递 pub_date 的字符串而不是日期时间引起的 update2:我要解决的方法不是最好的方法,我现在将尝试使用信号来实现相同的结果

4

3 回答 3

2

你对这一切都错了。身份验证后端是为了一件事:身份验证。您应该自定义后端的唯一原因是,如果您尝试从另一个系统绑定身份验证,或者需要进行一些其他更改,例如使用电子邮件作为用户名。否则,使用默认值

Django 为这个确切目的提供了信号,所以这就是你应该使用的。

from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=User)
def create_cookbook_for_user(sender, instance, created, *args, **kwargs):
    if created and not instance.cookbooks.exists():
        Cookbook.objects.create(name=instance.first_name, pub_date=date.today(), user=instance)

把它放在你的models.py中,你就完成了。

请参阅:https ://docs.djangoproject.com/en/dev/topics/signals/

于 2012-03-23T14:46:33.117 回答
0

我认为错误在于pub_date="12/12/2012":这不是DateTimeField. 相反,您想给它一个datetime对象:(datetime.datetime(2012, 12, 12)之后import datetime)。

或者也许datetime.datetime.now(),或者其他基于实际用户的东西。

(另外,也许这应该是DateField,在这种情况下你想要datetime.date(2012, 12, 12)datetime.date.today()datetime上面的对象表示 12 月 12 日的午夜。)

于 2012-03-23T14:43:04.070 回答
0

我认为您不能将字符串传递给 pub_date。尝试:

import datetime
pub_date=datetime.datetime.now()
于 2012-03-23T14:43:19.743 回答