django在创建新用户时用一些数据填充数据库
如何在每次创建新用户时使用一些默认/初始数据填充下表?我知道这一点,但这只有在我创建模型时才起作用。在这里,我想在创建新用户时插入一些默认条目 此外,当我创建一个新用户时,如何自动将其添加到具有静态组id的给定组中 models.pydjango在创建新用户时用一些数据填充数据库,django,django-models,django-forms,Django,Django Models,Django Forms,如何在每次创建新用户时使用一些默认/初始数据填充下表?我知道这一点,但这只有在我创建模型时才起作用。在这里,我想在创建新用户时插入一些默认条目 此外,当我创建一个新用户时,如何自动将其添加到具有静态组id的给定组中 models.py from django.db import models from django.contrib.auth.models import User class Category(models.Model): name = models.CharField(
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)
views.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,
})
forms.py
class UserCreationForm1(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ('username', 'email')
非常感谢 在创建新用户时,至少有两种方法可以处理用数据填充其他模型的问题。首先想到的是一个
post\u save
:
此代码将在保存User
的实例时执行,但仅在该用户尚未存在其他记录时创建这些记录
另一种方法是在表单上为用户重写
save()
方法。如果您在Django admin中也需要此功能,则需要取消注册内置的UserAdmin并注册自己的UserAdmin类以利用自定义表单。您需要的是Django的signals框架
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,
....
)
REF:搜索谷歌和这个论坛是我到目前为止所做的,但我想不出来。我想我必须将其添加到UserCreationForm1中的某个位置?但是每次创建用户时,都会为他/她存储初始数据,如果您不确定这是否是您想要的。关于将用户保存到组,您可以这样做,也许可以扩展用户模型并添加此方法?
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,
....
)