在Django,
说我有两个班,A和B.
B是A的子节点。我希望在B中有一个整数字段,它是A的pk。我希望每当我创建一个B对象时,B中的这个字段就会被初始化。
感谢。
P.S。本质上我希望能够从子类访问父对象的pk。如果有更简单/更好的方法,请告知
答案 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})