我可以应用哪种有效的技术来两次使用get_initial方法来解决以下所述的问题?

时间:2019-08-16 02:48:12

标签: django python-3.x django-models django-forms

我创建了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号映射到其所需记录,而无需手动添加任何数字。我需要帮助。预先非常感谢。

在我的模型中。py

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)

以我的形式。py

    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')

在我的views.py

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,也不会更改其行为。

0 个答案:

没有答案