Python Django,从父类中的值初始化子类中的字段
在Django 假设我有两个班,A和B B是A的子级。我希望B中有一个整数字段,它是A的主键。我希望B中的这个字段在我创建B对象时被初始化 谢谢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
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字段。