使用django和非注册用户创建约会应用程序

使用django和非注册用户创建约会应用程序,django,Django,我正在尝试为注册用户和非注册用户创建一个带有Django的约会应用程序 在注册用户的情况下,这很容易 但对于非注册用户,我的想法是创建一个临时用户,在用户表单和配置文件表单中只包含少量信息 但是它在html文件中没有显示任何内容,在第一种情况下,它没有保存约会 这是我在views.py中的函数 @login_required def create_appointment_D(request): if request.method=='POST' : user = User

我正在尝试为注册用户和非注册用户创建一个带有Django的约会应用程序

在注册用户的情况下,这很容易

但对于非注册用户,我的想法是创建一个临时用户,在用户表单和配置文件表单中只包含少量信息

但是它在html文件中没有显示任何内容,在第一种情况下,它没有保存约会

这是我在views.py中的函数

@login_required
def create_appointment_D(request):
    if request.method=='POST' :
        user = User()
        if request.user.is_doctor() or request.user.is_reception():
            appointment = request.POST['type']
            if appointment=='register patient':
                form_appointment = AppointmentForm_2()
                if form_appointment.is_valid():
                    form_appointment.save(commit=False)
                    form_appointment.user = request.user
                    form_appointment.end_time = form_appointment.start_time + timedelta(minutes=30)
                    form_appointment.save()
                    messages.success(request, 'appointment added')
                else:
                    messages.error(request, 'Error')
                    
                
            else:
                form_appointment = AppointmentForm_2() 
                form_user = UserEditForm() 
                profile_form = ProfileUpdateForm()
                if form_appointment.is_valid() and form_user.is_valid() and profile_form.is_valid():
                    form_appointment.save(commit=False)
                    form_appointment.user = request.user
                    form_appointment.end_time = form_appointment.start_time + timedelta(minutes=30)

                    form_user.save(commit=False)
                    form_user.type_of_user = user.type_of_user.TEMPORARY

                    profile_form.save(commit=False)

                    form_appointment.save()
                    form_user.save()
                    profile_form.save()
                    messages.success(request, 'appointment added')
                else:
                    messages.error(request, 'Error')
            return render(request, 'appointement/add_appointement1.html', {'form':form_appointment, 'user_form':form_user, 'form_appointment': profile_form})
        else:
            return HttpResponseRedirect(reverse("create_appointment_P"))

    return render(request,'appointement/add_appointement_options.html')
这是我的表格

class AppointmentForm_2(forms.ModelForm):
    doctor = forms.ModelChoiceField(queryset=User.objects.filter(type_of_user=TypeOfUser.DOCTOR))
    patient = forms.ModelChoiceField(queryset=User.objects.filter(type_of_user=TypeOfUser.PATIENT))
    date = forms.DateField(widget=forms.DateInput(attrs={'type': 'date'}))
    start_time = forms.DateField(widget=forms.DateInput(attrs={'type': 'time'}))
    class Meta:
        model = Appointment
        fields = ('patient', 'doctor', 'date', 'start_time')

class UserEditForm(forms.ModelForm):
    class Meta:
        model = User
        fields = ('first_name', 'last_name', 'email')

class ProfileUpdateForm(forms.ModelForm):
    gender = forms.ChoiceField(choices=GENDER_CHOICES, required=False, widget=forms.RadioSelect)
    class Meta:
        model = Profile
        fields = ('date_of_birth', 'gender', 'phone_number', 'blood_group', 'address', 'photo')

这是我的模特

class TypeOfUser(models.TextChoices):
    PATIENT = 'patient', 'Patient'
    DOCTOR = 'doctor', 'Doctor'
    RECEPTION = 'reception', 'Reception'
    TEMPORARY = 'temporary', 'Temporary'

class User(AbstractUser):
    type_of_user = models.CharField(max_length=200, choices=TypeOfUser.choices, default=TypeOfUser.PATIENT)
    allowd_to_take_appointement = models.CharField(max_length=20, choices=AllowdToTakeAppointement.choices, default=AllowdToTakeAppointement.YES)

    def is_doctor(self):
        return self.type_of_user == TypeOfUser.DOCTOR


    def is_temporary(self):
        return self.type_of_user == TypeOfUser.TEMPORARY


在第二种情况下,如何创建user=TOMPORARY类型的新用户?

如果使用
@login\u required
则只有拥有django帐户的经过身份验证的用户才能访问该页面

def
之前删除它并创建视图,但在这种情况下,任何人都可以访问该页面

检查是否有用

更新

您可以创建连接到用户身份验证模式的UserDoctor模型

 class UserDoctor(models.Model): 
     user = models.ForeignKey(User, on_delete=models.SET_NULL, default=None, null=True, blank=True,related_name="user") 
     name = models.CharField(max_length=40, null=True, blank=True) 
     surname = models.CharField(max_length=40, null=True, blank=True)
     ecc...
     temporary = models.BooleanField(default=1)

如果它变为finalite put temporary=0

这是一个预约应用程序,允许医生为注册用户和非注册用户创建预约。在第一种情况下,注册用户只需选择患者并创建预约。但在非注册用户的情况下,他需要创建一个临时用户,因此,如果用户创建约会,他需要登录,无论他是什么类型,我如何才能使该用户自动成为临时用户temporary=models.BooleanField(默认值=1);如果成为最终用户并编译所有表单将字段更新为0并提供其他权限,那么很抱歉,它可以正常工作,但当我要查询所有约会时,我有两个表,那么会有点混乱。是否有其他方法制作表单,允许用户在同一用户表中创建另一个临时用户