Python Django,从父类中的值初始化子类中的字段

Python Django,从父类中的值初始化子类中的字段,python,django,inheritance,Python,Django,Inheritance,在Django 假设我有两个班,A和B B是A的子级。我希望B中有一个整数字段,它是A的主键。我希望B中的这个字段在我创建B对象时被初始化 谢谢 p、 本质上,我希望能够从子类访问父对象的pk。如果有更简单/更好的方法,请建议您需要将class A设置为class B的外键 class B(models.Model): a = models.ForeignKey(A) ... 新建b=b.objects.create(a=a类的实例)您需要将a类设置为b类的外键 class B

在Django

假设我有两个班,A和B

B是A的子级。我希望B中有一个整数字段,它是A的主键。我希望B中的这个字段在我创建B对象时被初始化

谢谢


p、 本质上,我希望能够从子类访问父对象的pk。如果有更简单/更好的方法,请建议您需要将class A设置为class B的外键

class B(models.Model):
    a = models.ForeignKey(A)
    ...

新建b=b.objects.create(a=a类的实例)

您需要将a类设置为b类的外键

class B(models.Model):
    a = models.ForeignKey(A)
    ...

新建b=b.objects.create(a=a类的实例)

您需要将a类设置为b类的外键

class B(models.Model):
    a = models.ForeignKey(A)
    ...

新建b=b.objects.create(a=a类的实例)

您需要将a类设置为b类的外键

class B(models.Model):
    a = models.ForeignKey(A)
    ...

新建b=b.objects.create(a=a类的实例)

如果您正在利用模型表单创建
b
的实例,您可以将
a
的实例传递到表单中,并在那里设置值。这样,您就不必在视图代码中设置它

您还需要从
B_表单中排除
a
字段

class B_Form(forms.ModelForm):
    class Meta():
        exclude = ('a',)

    def __init__(self, *args, **kwargs):
        self.a = kwargs.pop('a')
        super(B_Form, self).__init__(*args, **kwargs)

    def save(self, force_insert=False, force_update=False, commit=True):
        instance = super(B_Form, self).save(commit=False)
        instance.a = self.a

        if commit:
            instance.save()
        return instance
要在视图中利用此表单类,请执行以下操作:

from your_app.forms import B_Form

def your_view(request, a_pk):
    a = get_object_or_404(A, pk=a_pk)
    b_form = B_Form(request.POST or None, a=a)

    if request.method == 'POST' and b_form.is_valid():
        b_form.save()

    return render('your-template.html', {'b_form': b_form})

如果要利用ModelForm创建
B
的实例,可以将
a
的实例传递到表单中,并在其中设置值。这样,您就不必在视图代码中设置它

您还需要从
B_表单中排除
a
字段

class B_Form(forms.ModelForm):
    class Meta():
        exclude = ('a',)

    def __init__(self, *args, **kwargs):
        self.a = kwargs.pop('a')
        super(B_Form, self).__init__(*args, **kwargs)

    def save(self, force_insert=False, force_update=False, commit=True):
        instance = super(B_Form, self).save(commit=False)
        instance.a = self.a

        if commit:
            instance.save()
        return instance
要在视图中利用此表单类,请执行以下操作:

from your_app.forms import B_Form

def your_view(request, a_pk):
    a = get_object_or_404(A, pk=a_pk)
    b_form = B_Form(request.POST or None, a=a)

    if request.method == 'POST' and b_form.is_valid():
        b_form.save()

    return render('your-template.html', {'b_form': b_form})

如果要利用ModelForm创建
B
的实例,可以将
a
的实例传递到表单中,并在其中设置值。这样,您就不必在视图代码中设置它

您还需要从
B_表单中排除
a
字段

class B_Form(forms.ModelForm):
    class Meta():
        exclude = ('a',)

    def __init__(self, *args, **kwargs):
        self.a = kwargs.pop('a')
        super(B_Form, self).__init__(*args, **kwargs)

    def save(self, force_insert=False, force_update=False, commit=True):
        instance = super(B_Form, self).save(commit=False)
        instance.a = self.a

        if commit:
            instance.save()
        return instance
要在视图中利用此表单类,请执行以下操作:

from your_app.forms import B_Form

def your_view(request, a_pk):
    a = get_object_or_404(A, pk=a_pk)
    b_form = B_Form(request.POST or None, a=a)

    if request.method == 'POST' and b_form.is_valid():
        b_form.save()

    return render('your-template.html', {'b_form': b_form})

如果要利用ModelForm创建
B
的实例,可以将
a
的实例传递到表单中,并在其中设置值。这样,您就不必在视图代码中设置它

您还需要从
B_表单中排除
a
字段

class B_Form(forms.ModelForm):
    class Meta():
        exclude = ('a',)

    def __init__(self, *args, **kwargs):
        self.a = kwargs.pop('a')
        super(B_Form, self).__init__(*args, **kwargs)

    def save(self, force_insert=False, force_update=False, commit=True):
        instance = super(B_Form, self).save(commit=False)
        instance.a = self.a

        if commit:
            instance.save()
        return instance
要在视图中利用此表单类,请执行以下操作:

from your_app.forms import B_Form

def your_view(request, a_pk):
    a = get_object_or_404(A, pk=a_pk)
    b_form = B_Form(request.POST or None, a=a)

    if request.method == 'POST' and b_form.is_valid():
        b_form.save()

    return render('your-template.html', {'b_form': b_form})


这是Django中多表继承的默认行为?如何从B模型访问A的pk?B.id只会给我B的pk,但我想要A的pk你的答案是
ForeignKey
field-。它使创建关系变得非常简单,而且双方都可以自动使用。请尝试
b.a_ptr
,让
b
成为
b
的一个实例。这是Django中多表继承的默认行为。这是什么?如何从B模型访问A的pk?B.id只会给我B的pk,但我想要A的pk你的答案是
ForeignKey
field-。它使创建关系变得非常简单,而且双方都可以自动使用。请尝试
b.a_ptr
,让
b
成为
b
的一个实例。这是Django中多表继承的默认行为。这是什么?如何从B模型访问A的pk?B.id只会给我B的pk,但我想要A的pk你的答案是
ForeignKey
field-。它使创建关系变得非常简单,而且双方都可以自动使用。请尝试
b.a_ptr
,让
b
成为
b
的一个实例。这是Django中多表继承的默认行为。这是什么?如何从B模型访问A的pk?B.id只会给我B的pk,但我想要A的pk你的答案是
ForeignKey
field-。它使建立关系变得非常容易,而且双方都可以自动使用。试试
b.a_ptr
,让
b
成为
b
的一个实例。如果你想要具体的继承,可以。如果不是,则需要ForeignKey字段。如果要具体继承,则需要。如果不是,则需要ForeignKey字段。如果要具体继承,则需要。如果不是,则需要ForeignKey字段。如果要具体继承,则需要。如果不是,则需要ForeignKey字段。