django在创建新用户时用一些数据填充数据库

django在创建新用户时用一些数据填充数据库,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(

如何在每次创建新用户时使用一些默认/初始数据填充下表?我知道这一点,但这只有在我创建模型时才起作用。在这里,我想在创建新用户时插入一些默认条目

此外,当我创建一个新用户时,如何自动将其添加到具有静态组id的给定组中

models.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)
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,
            ....
        )