【问题标题】:Creating a User Account For Every Hospital Instance Created - Django为创建的每个医院实例创建一个用户帐户 - Django
【发布时间】:2018-08-22 19:23:31
【问题描述】:

我希望每次创建医院时,同样创建一个相应的用户帐户,允许新创建的帐户登录....

models.py

class Hospital(models.Model):
    """
    Model representing individual Hospitals
    """
    id = models.UUIDField(primary_key=True, unique=True, db_index=True, default=uuid.uuid4, editable=False)
    hospital_name = models.CharField(help_text="full name of hospital", max_length=200)
    slug = models.SlugField(max_length=200)
    hospital_logo = models.ImageField(upload_to='hospital_logo',)
    hospital_address = models.CharField(max_length=500)
    hospital_email = models.EmailField(max_length=254)
    hospital_website = models.CharField(max_length=200)
    hospital_rc_number = models.PositiveSmallIntegerField()
    date_added = models.DateField(auto_now=True)

forms.py

class HospitalForm(forms.ModelForm):
    """
    Forms for Hospital creation
    """
    class Meta:
        model = Hospital
        fields = ('hospital_name', 'hospital_address', 'hospital_email', 'hospital_website', 'hospital_rc_number','hospital_logo')

        widgets = {

            'hospital_name': forms.TextInput(attrs={'class': 'form-control'}),
            'hospital_address': forms.TextInput(attrs={'class': 'form-control'}),
            'hospital_email': forms.TextInput(attrs={'class': 'form-control'}),
            'hospital_website': forms.TextInput(attrs={'class': 'form-control'}),
            'hospital_rc_number': forms.TextInput(attrs={'class': 'form-control'}),
        }

    def save(self):
        instance = super(HospitalForm, self).save(commit=False)
        instance.slug = slugify(instance.hospital_name)
        instance.save()
        return instance

views.py

class HospitalCreate(CreateView):
    model = Hospital
    form_class = HospitalForm
    template_name = 'hospital/hospital_add.html'
    pk_url_kwarg = 'hospital_id'
    success_url = reverse_lazy('hospital_list')
    user_form = UserForm

【问题讨论】:

    标签: django python-2.7 django-models django-forms django-views


    【解决方案1】:

    一种选择是将用户创建添加到您的视图form_valid method

    class HospitalCreate(CreateView):
        def form_valid(self, form):
            form.save()
    
            # create user here
    
            return HttpResponseRedirect(self.get_success_url())
    

    【讨论】:

    • 这对您有帮助吗?你能让它工作吗?如果是这样,我将不胜感激(或者如果您将答案标记为已接受)。
    【解决方案2】:

    我不知道这是否是解决此问题的最佳方法,但它似乎正在做我想做的事。我还没有完全检查是否会弹出其他问题。 我在医院模型中创建了更多与 User 类中的字段相对应的字段,并且我能够使用 object.create_user 方法在 User 类中创建医院模型的实例。

    models.py

    class Hospital(models.Model):
        """
        Model representing individual Hospitals
        """
        id = models.UUIDField(primary_key=True, unique=True, db_index=True, default=uuid.uuid4, editable=False)
        admin_username = models.CharField(unique=True, max_length=15)
        first_name = models.CharField(max_length=30)
        last_name = models.CharField(max_length=30)
        password = models.CharField(max_length=50)
        password2 = models.CharField(max_length=50)
        user = models.IntegerField()
        hospital_name = models.CharField(help_text="full name of hospital", max_length=200)
        slug = models.SlugField(max_length=200)
        hospital_logo = models.ImageField(upload_to='hospital_logo',)
        hospital_address = models.CharField(max_length=500)
        hospital_email = models.EmailField(max_length=254)
        hospital_website = models.CharField(max_length=200)
        hospital_rc_number = models.PositiveSmallIntegerField()
        date_added = models.DateField(auto_now=True)
    

    forms.py

    class HospitalForm(forms.ModelForm):
        """
        Forms for Hospital creation
        """
        class Meta:
            model = Hospital
            fields = ('hospital_name', 'hospital_address', 'hospital_email', 'hospital_website', 'hospital_rc_number',
                      'first_name','last_name','hospital_logo','admin_username','password','password2')
    
            widgets = {
    
                'admin_username': forms.TextInput(attrs={'class': 'form-control'}),
                'first_name': forms.TextInput(attrs={'class': 'form-control'}),
                'last_name': forms.TextInput(attrs={'class': 'form-control'}),
                'password': forms.PasswordInput(attrs={'class': 'form-control'}),
                'password2': forms.PasswordInput(attrs={'class': 'form-control'}),
                'hospital_name': forms.TextInput(attrs={'class': 'form-control'}),
                'hospital_address': forms.TextInput(attrs={'class': 'form-control'}),
                'hospital_email': forms.TextInput(attrs={'class': 'form-control'}),
                'hospital_website': forms.TextInput(attrs={'class': 'form-control'}),
                'hospital_rc_number': forms.TextInput(attrs={'class': 'form-control'}),
            }
    
        def save(self):
            instance = super(HospitalForm, self).save(commit=False)
            instance.slug = slugify(instance.hospital_name)
            instance.save()
    
            return instance
    

    And Views.py

    class HospitalCreate(CreateView):
        model = Hospital
        form_class = HospitalForm
        template_name = 'hospital/hospital_add.html'
        pk_url_kwarg = 'hospital_id'
        success_url = reverse_lazy('hospital_list')
    
        def form_valid(self, form):
            username = form.instance.admin_username
            password = form.instance.password
            email = form.instance.hospital_email
            first_name = form.instance.first_name
            last_name = form.instance.last_name
    
            user_profile = User.objects.create_user(username=username, password=password, email=email,first_name=first_name,
                                                    last_name=last_name, is_staff='0', is_active='1')
    
            user_profile.save()
    
            form.instance.user = int(user_profile.id)
    
            return super(HospitalCreate, self).form_valid(form)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 2020-02-12
      • 2012-04-02
      • 1970-01-01
      相关资源
      最近更新 更多