小编Epo*_*pok的帖子

在使用FOSUserBundle进行用户注册期间添加默认角色

版本:Symfony 2.2

当用户在我的网站上注册时,我正在尝试添加默认角色.我使用FOSUserBundle,我看到当用户注册角色字段在数据库中为空时.我从这个庞大的包开始,它不是很容易理解.所以我阅读了所有的文档,我不知道该怎么做.

现在,我创建一个事件来动态添加这个角色,但它不起作用(我没有错误,但我的数据库仍然是空的)我甚至不知道这是做这个的好方法吗?

我的活动:

use FOS\UserBundle\FOSUserEvents;
use FOS\UserBundle\Event\FormEvent;
use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

class AddDefaultRoleListener implements EventSubscriberInterface {

  private $container;

  public function __construct(Container $container)
  {
    $this->container = $container;
  }

  /**
   * {@inheritDoc}
   */
  public static function getSubscribedEvents()
  {
    return array(
        FOSUserEvents::REGISTRATION_SUCCESS => 'onAddDefaultRoleSuccess',
    );
  }

  public function onAddDefaultRoleSuccess(FormEvent $event)
  {
    $doctrine = $this->container->get('doctrine');
    $em = $doctrine->getManager();

    $user = $event->getForm()->getData();
    $user->addRole('ROLE_USER');
    //$user->setRoles(array('ROLE_USER'));

    $em->persist($user);
  }
}
Run Code Online (Sandbox Code Playgroud)

如你所见,我创建一个简单的事件,听取REGISTRATION_SUCCESS,但似乎没有任何工作.这是我第一次尝试使用事件和服务.所以,如果有人有建议,我会接受:)

谢谢

symfony fosuserbundle

26
推荐指数
2
解决办法
3万
查看次数

使用Django-taggit和django-rest-framework,我无法保存我的标签

我想弄清楚为什么当我提交表单时,我的标签不会保存在我的数据库中.django-rest-framework和Django-taggit也很新,我觉得我做错了:)

首先,在使用rest-framework创建API之前,我使用通用视图(CreateView和UpdateView)来注册/验证我的事件.它工作正常,但我决定进一步尝试构建一个API,因为我现在正在使用Angularjs.

现在我的模型事件已创建,但没有我的标签,我有一些错误.我放了一些代码,之后我会描述我的错误.

事件/ models.py

class Event(models.Model):
[...]

    title = models.CharField(max_length=245, blank=False)
    description = models.TextField(max_length=750, null=True, blank=True)
    start = models.DateTimeField()
    end = models.DateTimeField()
    created_at = models.DateTimeField(editable=False)
    updated_at = models.DateTimeField(editable=False)
    slug = AutoSlugField(populate_from='title', unique=True, editable=False)
    expert = models.BooleanField(choices=MODE_EXPERT, default=0)
    home = models.BooleanField(choices=HOME, default=0)
    nb_participant = models.PositiveSmallIntegerField(default=1)
    price = models.PositiveSmallIntegerField(default=0)
    cancelled = models.BooleanField(default=0)

    user = models.ForeignKey(User, editable=False, related_name='author')
    address = models.ForeignKey('Address', editable=False, related_name='events')
    participants = models.ManyToManyField(User, related_name='participants', blank=True, editable=False,
                                      through='Participants')
    theme_category = models.ForeignKey('EventThemeCategory', unique=True, editable=False)

    tags = TaggableManager(blank=True)

    class Meta:
        db_table = …
Run Code Online (Sandbox Code Playgroud)

django django-taggit django-rest-framework

9
推荐指数
3
解决办法
4007
查看次数

如何仅在更改视图中显示自定义字段(admin)

我是Python和Django的新手:)我需要一些帮助.

我想做的事:

我有一个模型页面,我需要在有人尝试更新一个对象时添加自定义字段"消息".

为什么?因为我正在建立一个修订系统.这个领域,它只是对变化的解释.所以这个字段没有链接到Page(但是链接到另一个模型PageRevision)

经过一些研究,我设法将此字段添加到admin.py文件中的表单,如下所示:

class PageAdminForm(forms.ModelForm):
    # custom field not backed by database
    message = forms.CharField(required=False)

    class Meta:
        model = Page
Run Code Online (Sandbox Code Playgroud)

它的工作,我的领域现在显示...但我不希望这个领域到处都是.就在有人试图更新Page对象时.我发现这个答案不同的字段为添加和更改页面在管理员,但它不适合我,因为它是一个自定义字段(我认为).

我在admin.py中的其余代码:

class PageAdmin(admin.ModelAdmin):
    form = PageAdminForm
    fields = ["title", "weight", "description", "message"]
    list_display = ["title", "weight", "description"]
    list_filter = ["updated_at"]

    def get_form(self, request, obj=None, **kwargs):
        if obj is None:
            # not working ?
            kwargs['exclude'] = ['message']
        # else:
        #     kwargs['exclude'] = ['message']
        return super(PageAdmin, self).get_form(request, obj, **kwargs)

    def save_model(self, request, obj, form, change): …
Run Code Online (Sandbox Code Playgroud)

django django-admin

2
推荐指数
1
解决办法
3948
查看次数