0

私は django に基づくレシピ Web サイトに取り組んでおり、カスタム バックエンドで問題が発生しました。

クックブック インスタンスをバックエンドに保存しようとすると、検証エラー - 例外が提供されません。

ここに私のバックエンドがあります:

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":これはの有効な値ではありませんDateTimeFielddatetime代わりに、オブジェクトを与えたいと思います:(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 に答える