我创建了3个模型A,B和C,它们使用外键相互链接。使用OneToOne关系将模型“ B”链接到模型“ A”,并且 模型“ C”也使用“ OneToOne”关系链接到模型“ B”。
然后,我使用“ get_initial()”方法使用模型“ A”的外键连接为模型“ B”的形式设置初始id_field。 后来我重复了相同的“ get_intial()”,以使用与B的外键连接为模型“ C”的形式设置初始id字段。
这按预期进行。如何删除从模型“ A”中的实例获得的id为7的模型“ B”中的记录实例,并使用相同的id = 7在模型“ B”中重新创建新记录。每当我从模型“ B”调用id为7的形式为“ C”的get_initial()方法时,都会收到错误消息“ 不存在匹配的查询。”
当我将被叫ID加1时,我得到了正确的查询结果。
我进一步删除了模型“ B”中的另外4条记录,并使用模型“ A”传递的ID重新创建了它们。并意识到当我调用get_initial()方法为表单“ C”设置初始名称时,我会得到相同的错误消息“ 不存在匹配查询”,直到我将4添加到被调用的id中为止。 (即,在这种情况下,id = 5,而不是id = 1)。
总而言之:我的测试始终提出id = id +(已删除记录模型“ B”的总数)的要求。在get_initial方法适用于表单“ C”之前。
我认为有一种使用get initial方法执行此操作的更可靠的方法,其中每个查询的ID号映射到其所需记录,而无需手动添加任何数字。我需要帮助。预先非常感谢。
class MTNvoucherSubmissionTable(models.Model):
paymentType = models.CharField(max_length=50)
voucherIDM = models.CharField(max_length=12)
voucherSubmissionDateAndTimeM = models.DateTimeField(auto_now_add=True)
def __int__(self):
return self.pk
class MTNvoucherConfirmationTable(models.Model):
mtnVoucherSubmissionID = models.OneToOneField(MTNvoucherSubmissionTable,
on_delete=models.CASCADE)
voucherPackage = models.CharField(max_length=8)
voucherConfirmationStatusDateAndTimeM = models.DateTimeField(auto_now=True)
def __int__(self):
return self.pk
class MTNproductCollectionTable(models.Model):
mtnVoucherConfirmationID = models.OneToOneField(MTNvoucherConfirmationTable, on_delete=models.CASCADE)
voucherCollectionStatusM = models.CharField(max_length=5)
productCollectedByM = models.CharField(max_length=200)
voucherCollectionStatusDateAndTimeM = models.DateTimeField(auto_now=True)
class MTNproductCollectionForm(forms.ModelForm):
class Meta:
model = MTNproductCollectionTable
fields = ('paymentType','voucherIDM','voucherSubmissionDateAndTimeM')
class MTNvoucherConfirmationTable(forms.ModelForm):
class Meta:
model = MTNproductCollectionTable
fields = ('mtnVoucherSubmissionID','voucherPackage','voucherConfirmationStatusDateAndTimeM')
class MTNproductCollectionForm(forms.ModelForm):
class Meta:
model = MTNproductCollectionTable
fields = ('mtnVoucherConfirmationID','voucherCollectionStatusM','productCollectedByM')
class MTNvoucherSubmissionView(CreateView):
form_class = MTNvoucherSubmissionForm
model = MTNvoucherSubmissionTable
class MTNproductCollectionView(CreateView):
form_class = MTNproductCollectionForm
model = MTNproductCollectionTable
def get_initial(self):
initial = super(MTNproductCollectionView, self).get_initial()
initial['mtnVoucherConfirmationID'] = MTNvoucherConfirmationTable.objects.get(pk=self.kwargs['pk'])
return initial
class MTNproductCollectionView(CreateView):
form_class = MTNproductCollectionForm
model = MTNproductCollectionTable
def get_initial(self):
initial = super(MTNproductCollectionView, self).get_initial()
initial['mtnVoucherConfirmationID'] = MTNvoucherConfirmationTable.objects.get(pk=self.kwargs['pk'])
return initial
我希望获得帮助以获取“ B”的任何记录实例模型的确切ID调用,以为模型“ C”形式的id_field设置初始ID。即使更改了模型“ B”的任何记录并使用从“ A”传递来的其sam enter code here
e id,也不会更改其行为。