sik*_*kor 3 django django-models django-forms
每次创建新用户时,如何使用一些默认/初始数据填充下表?我知道这个https://docs.djangoproject.com/en/dev/howto/initial-data/,但这仅在我创建模型时有效。在这里,我想在创建新用户时插入一些默认条目。
此外,当我创建一个新用户时,如何自动将他添加到具有静态组 ID 的给定组?
模型.py
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
name = models.CharField(max_length=50)
user = models.ForeignKey(User)
class Feed(models.Model):
url = models.URLField()
name = models.CharField(max_length=50)
created = models.DateTimeField(auto_now_add=True)
description = models.TextField(blank=True)
category = models.ForeignKey(Category)
user = models.ForeignKey(User)
Run Code Online (Sandbox Code Playgroud)
视图.py
def signup(request):
if request.method == 'POST':
form = UserCreationForm1(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect("/accounts/login")
else:
form = UserCreationForm1()
return render(request, "registration/signup.html", {
'form': form,
})
Run Code Online (Sandbox Code Playgroud)
表格.py
class UserCreationForm1(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ('username', 'email')
Run Code Online (Sandbox Code Playgroud)
非常感谢!
您正在寻找的是 Django 的信号框架。
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User, Group
from my_app import Category, Feed
@receiver(post_save, sender=User)
def init_new_user(instance, created, raw, **kwargs):
# raw is set when model is created from loaddata.
if created and not raw:
instance.groups.add(
Group.objects.get(name='new-user-group'))
Category.objects.create(
name="Default", user=instance)
Feed.objects.create(
user = instance,
name = "%s's Feed" % instance.first_name,
....
)
Run Code Online (Sandbox Code Playgroud)
参考资料:https : //docs.djangoproject.com/en/1.5/topics/signals/