如何为整个django表单集创建唯一id?

如何为整个django表单集创建唯一id?,django,django-forms,Django,Django Forms,我已经创建了一个表单集来提交项目成本,我希望每次提交都有一个唯一的id。我希望稍后在url中使用提交id(即“项目/1/成本提交编辑/3”)。1为项目id,3为成本提交id 表单集定义为: 型号.py class ProjectData(models.Model): project_name = models.CharField(max_digits = 20) client = models.CharField(max_digits= 15) class ProjectCo

我已经创建了一个表单集来提交项目成本,我希望每次提交都有一个唯一的id。我希望稍后在url中使用提交id(即
“项目/1/成本提交编辑/3
”)。1为项目id,3为成本提交id

表单集定义为:

型号.py

class ProjectData(models.Model):
    project_name  = models.CharField(max_digits = 20)
    client = models.CharField(max_digits= 15)

class ProjectCostSubmission(models.Model):
        project_name  = models.ForeignKey(ProjectData, max_digits = 20)
        cost_name = models.CharField(max_digits= 15)
        amount = models.DecimalField(max_digits=9)
        submission_date = models.DateField(auto_now_add=True)
        payment_approval_date = models.DateField(auto_add_now=True)
class MyForm(forms.ModelForm):

   def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.label_suffix = ""

   class Meta:
        model = ProjectData
        fields = "__all__"


MyFormSet = inlineformset_factory(ProjectData,ProjectCostSubmission, form=MyForm,extra=2)
path("/projects/<int:project_id>/cost-submission-edit/",ProjectCostView.as_view(),name="costView")
forms.py

class ProjectData(models.Model):
    project_name  = models.CharField(max_digits = 20)
    client = models.CharField(max_digits= 15)

class ProjectCostSubmission(models.Model):
        project_name  = models.ForeignKey(ProjectData, max_digits = 20)
        cost_name = models.CharField(max_digits= 15)
        amount = models.DecimalField(max_digits=9)
        submission_date = models.DateField(auto_now_add=True)
        payment_approval_date = models.DateField(auto_add_now=True)
class MyForm(forms.ModelForm):

   def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.label_suffix = ""

   class Meta:
        model = ProjectData
        fields = "__all__"


MyFormSet = inlineformset_factory(ProjectData,ProjectCostSubmission, form=MyForm,extra=2)
path("/projects/<int:project_id>/cost-submission-edit/",ProjectCostView.as_view(),name="costView")
视图.py

class ProjectCostView(CreateView):
    template_name = "/project_cost.html"
    model = ProjectCostSubmission
    fields = '__all__'
    form_class = MyForm
url.py

class ProjectData(models.Model):
    project_name  = models.CharField(max_digits = 20)
    client = models.CharField(max_digits= 15)

class ProjectCostSubmission(models.Model):
        project_name  = models.ForeignKey(ProjectData, max_digits = 20)
        cost_name = models.CharField(max_digits= 15)
        amount = models.DecimalField(max_digits=9)
        submission_date = models.DateField(auto_now_add=True)
        payment_approval_date = models.DateField(auto_add_now=True)
class MyForm(forms.ModelForm):

   def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    self.label_suffix = ""

   class Meta:
        model = ProjectData
        fields = "__all__"


MyFormSet = inlineformset_factory(ProjectData,ProjectCostSubmission, form=MyForm,extra=2)
path("/projects/<int:project_id>/cost-submission-edit/",ProjectCostView.as_view(),name="costView")
相反,我希望它看起来像这样:

Project Name   Client   Cost Name  Amount   Submission Date  Approval Date
------------   ------   --------   ------   ---------------  -------------
Project1       Client1  Cost A     1000.00    12/02/2019      12/03/2019      
Project1       Client1  Cost B     1000.00    12/02/2019      12/03/2019
Project1       Client1  Cost C     1000.00    12/03/2019      12/03/2019
Project1       Client1  Cost A     1000.00    12/03/2019      12/03/2019      
Project1       Client1  Cost F     1000.00    12/04/2019      12/04/2019
Project1       Client1  Cost G     1000.00    12/04/2019      12/04/2019     
-------------------------------------------------------------------------
Total: $6000.00
-------------------------------------------------------------------------

with the url "/projects/1/cost-submission-edit/".'/1/' is the project id.
url "/projects/1/cost-submission-edit/1/"


Project Name   Client   Cost Name  Amount   Submission Date  Approval Date
------------   ------   --------   ------   ---------------  -------------
Project1       Client1  Cost A     1000.00    12/02/2019      12/03/2019      
Project1       Client1  Cost B     1000.00    12/02/2019      12/03/2019
-------------------------------------------------------------------------
Total: $2000.00
-------------------------------------------------------------------------

url "/projects/1/cost-submission/2/"

Project Name   Client   Cost Name  Amount   Submission Date  Approval Date
------------   ------   --------   ------   ---------------  -------------
Project1       Client1  Cost C     1000.00    12/03/2019      12/03/2019
Project1       Client1  Cost A     1000.00    12/03/2019      12/03/2019
-------------------------------------------------------------------------
Total: $2000.00
-------------------------------------------------------------------------      

url "/projects/1/cost-submission/3/" 

Project Name   Client   Cost Name  Amount   Submission Date  Approval Date
------------   ------   --------   ------   ---------------  -------------  
Project1       Client1  Cost F     1000.00    12/04/2019      12/04/2019
Project1       Client1  Cost G     1000.00    12/04/2019      12/04/2019
-------------------------------------------------------------------------
Total: $2000.00
-------------------------------------------------------------------------
在这里,每个提交都有一个唯一的id,并使用url路径作为
路径(“/projects//cost submission edit/”,ProjectCostView.as_view(),name=“costView”)


如何为每个提交创建唯一的id,以便选择和编辑每个提交?谢谢。

我认为你的问题与两个因素有关:

您的url应该有两个动态值。

如果希望url为
“/projects/1/cost submission edit/1/”
,则您的url应类似于:

def viewname(request, project_id,submission_id ):
    #from here your view already knows for example what to look for in project 
    #1, subbmission 3
path(“/projects//cost submission edit//”,ProjectCostView.as_view(),name=“costView”)

您没有将url的动态值传递给视图。

您的视图需要接收url的动态值。比如:

def viewname(request, project_id,submission_id ):
    #from here your view already knows for example what to look for in project 
    #1, subbmission 3

谢谢…我理解这一点,但我如何在每次创建新提交时生成唯一的提交id?这样我就可以将其传递到url。我可以将其作为字段添加到ProjectCostSubmission模型中并将其设置为自动递增吗?为什么不使用每条记录的id作为该标识符?目前每条记录都有一个id,但我如何知道id为1、2、3或6、7、8(例如)的记录是由同一提交创建的?如果每个记录可以存储相同的提交id,我可以使用该id进行过滤。每次创建提交时,我如何自动创建一个存储在每个记录上的提交id?如果我在该提交中有5条记录,每个记录都应该有一个相似的提交id。我希望这是有意义的。好吧,那么使用AutoField字段是行不通的,因为每个记录都会像id一样增加一个。我要做的是在模型中使用一个字段
counter\u submission
,在视图中读取最高的当前值,将其增加到1,并与表单submission一起保存。