在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