如何为整个django表单集创建唯一id?
我已经创建了一个表单集来提交项目成本,我希望每次提交都有一个唯一的id。我希望稍后在url中使用提交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
“项目/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一起保存。