在Django中,Django的,在父类的值初始化子类的字段
说我有两个类,A和B.
B是我希望这是一个A的孩子B中的整数字段是A的pk。我希望B中的这个字段可以在创建B对象时进行初始化。
谢谢。
p.s.基本上我想能够从子类访问父对象的pk。如果有一个更简单/更好的办法,请指教
在Django中,Django的,在父类的值初始化子类的字段
说我有两个类,A和B.
B是我希望这是一个A的孩子B中的整数字段是A的pk。我希望B中的这个字段可以在创建B对象时进行初始化。
谢谢。
p.s.基本上我想能够从子类访问父对象的pk。如果有一个更简单/更好的办法,请指教
您需要设置A类为外键B类
class B(models.Model):
a = models.ForeignKey(A)
...
新B = B.objects.create(A = instance_of_class_a。 ..)
如果你想要具体的继承,是的。如果不是,则需要ForeignKey字段。 – Brandon
如果您利用ModelForm创建B
的实例,则可以将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
排除a
领域,在视图中利用这种形式的类:
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,但我想要pk的A – Bob
你的答案是'ForeignKey'字段 - https://docs.djangoproject.com/en/1.8/ref/models/fields/#django .db.models.ForeignKey。它使得创建关系非常容易,而且它们可以自动从双方获得。 – bardzusny