版本: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,但似乎没有任何工作.这是我第一次尝试使用事件和服务.所以,如果有人有建议,我会接受:)
谢谢
我想弄清楚为什么当我提交表单时,我的标签不会保存在我的数据库中.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) 我是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)