主类中具有唯一属性的Python继承

2024-05-15 16:44:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有点小问题

class Person(models.Model):
    cpf = BRCPFField(**unique=true**)


class Student(Person):
    new_field = ....


class Teacher(Student):
    another_field = ...


class BoardMember(Person):
    class Meta:
        proxy = True

CPF=USA SSN.

一个人将来可以是学生、董事会成员,学生也可以是教师

当我给一个人注册中央公积金时,没关系。但是,当我尝试将同一个人注册为学生时,python会显示一个错误,因为该字段是唯一的。我怎样才能解决这个问题

表格:

class PersonForm(forms.ModelForm):
    class Meta:
        model = Person
        fields = '__all__'


class BoardMemberForm(PersonForm):
   class Meta:
        model = BoardMember
        fields = '__all__'


class StudentForm(PersonForm):
   class Meta:
        model = Student
        fields = '__all__'

观点:

class StudentCreate(LoginRequiredMixin, CreateView):
    model = Student
    form_class = StudentForm
    login_url = reverse_lazy('users:login')


class BoardMember Create(LoginRequiredMixin, CreateView):
    model = BoardMember
    login_url = reverse_lazy('users:login')
    form_class = BoardMemberForm

学生表格模板:

<form class="row gx-3 gy-2 align-items-center needs-validation" method="post" action=""
      role="form" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.media }}
    <div class="row g-3">
        <div class="col-md-3">
            <div class="form-floating">
                {{ form.cpf }}
                <label for="id_cpf">CPF</label>
            </div>
        </div>
        <div class="col-md-6">
            <div class="form-floating">
                {{ form.nome }}
                <label for="id_nome">Nome</label>
            </div>
        </div>            
    </div>           
    <div class="col-auto">
        <button type="submit" class="btn btn-primary mb-2">Enviar</button>
    </div>
</form>

模板董事会成员表格:

<form class="row gx-3 gy-2 align-items-center needs-validation" method="post" action=""
      role="form" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.media }}
    <div class="row g-3">
        <div class="col-md-3">
            <div class="form-floating">
                {{ form.cpf }}
                <label for="id_cpf">CPF</label>
            </div>
        </div>
        <div class="col-md-6">
            <div class="form-floating">
                {{ form.nome }}
                <label for="id_nome">Nome</label>
            </div>
        </div>
       <div class="col-md-6">
            <div class="form-floating">
                {{ form.function }}
                <label for="id_nome">Function</label>
            </div>
        </div>            
    </div>           
    <div class="col-auto">
        <button type="submit" class="btn btn-primary mb-2">Enviar</button>
    </div>
</form>

Tags: divformidformodelcolmdstudent