django - 通过 django 应用程序创建 url
问题描述
我有两个带有两个模型的应用程序。我想生成以下 url 结构:http ://example.com/company/'companyslug'/worker/'workerslug '
在上面的 url 中,“companyslug”和“workerslug”是变量。
我已经浏览了很多帖子,但我没有找到任何解决方案。主要问题是,如果系统生成链接,则两次评估的值都作为 Worker 模型的属性。
你有什么想法,我怎样才能生成一个像上面那样的链接?
非常感谢!
app1/models.py
class Company(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=150)
slug = models.SlugField(max_length=150, unique=True)
app2/models.py
class Worker(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
rel_company_worker = models.ForeignKey('app1.Company', on_delete = models.CASCADE, null=True,related_name='workers')
first_name = models.CharField(,max_length= 50, blank=True )
last_name = models.CharField(,max_length= 50, blank=True )
slug = models.SlugField(max_length=100, null=True)
我有 3 个网址文件:urls.py
urlpatterns = [
path("company/", include('app1.urls')),
]
app1/urls.py
urlpatterns = [
path('<slug:slug>/worker/',include('app2.urls')),
]
app2/urls.py
urlpatterns = [
path('<slug:slug>',views.WorkerDetailView.as_view(), name ='worker-detail-view'),
]
app2.views.py
class WorkerDetailView(generic.DetailView):
model = Worker
如果我运行代码,它会生成以下链接:
http://example.com/company/**'workerslug'**/worker/**'workerslug'**
解决方案
您需要重命名其中一个 slug,例如:
urlpatterns = [
path('<slug:company_slug>/worker/', include('app2.urls')),
]
然后覆盖详细视图中的查询集以仅包括来自公司的员工。
class WorkerDetailView(DetailView):
def get_queryset(self):
queryset = super(WorkerDetailView, self).get_queryset()
return queryset.filter(rel_company_worker__slug=self.kwargs['company_slug'])
顺便说一句,您的嵌套包含使您的网址难以理解。我会考虑摆脱第二个包含并将其更改为:
urlpatterns = [
path('<slug:company_slug>/worker/<slug:slug>', views.WorkerDetailView.as_view(), name ='worker-detail-view'),
]
我还会考虑将Company
模型的外键重命名为company
:
class Worker(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
company = models.ForeignKey('app1.Company', on_delete = models.CASCADE, null=True, related_name='workers')
...
推荐阅读
- paypal - paypal onboard before payment 403 Forbidden 错误,问题:MISSING_SCOPES
- javascript - 覆盖默认 TabIndex 行为以首先选择选中的元素
- python - 如何在 pywebhfds 中通过连接错误?
- android - android kotlin 数据绑定 kapt 丢失
- macos - 无法验证您的申请。我们无法创建身份验证会话
- javascript - 通过 FTP 到 JSON 的不完整 CSV
- r - 检索一组具有唯一子字符串的字符串
- paypal - 将 PayPal 支付与用户支付给另一个用户 (PHP) 集成
- javascript - JS数组在读取时被布尔值覆盖
- html - 将剪辑路径位置移动到鼠标光标