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

时间:2015-07-21 18:58:14

标签: python django inheritance

在Django,

说我有两个班,A和B.

B是A的子节点。我希望在B中有一个整数字段,它是A的pk。我希望每当我创建一个B对象时,B中的这个字段就会被初始化。

感谢。

P.S。本质上我希望能够从子类访问父对象的pk。如果有更简单/更好的方法,请告知

2 个答案:

答案 0 :(得分:3)

您需要将A类设置为B类的外键

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

new b = B.objects.create(a = instance_of_class_a,...)

答案 1 :(得分:0)

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

您还希望从a

中排除B_Form字段
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})