DetailView与其他两个模型的数据

时间:2019-04-29 10:14:31

标签: python django

我想从社区中获得一些建议。

我已经开始学习Django,并对应用程序的结构有疑问。

我有一个URL http://127.0.0.1:8000/asset/2/,这是我的Asset模型的DetailView,它也有两个卡块,用于容纳其他两个模型Tenant和Service的数据。查看下面的屏幕截图。

enter image description here

我正在从 asset / views.py 文件生成以上视图。代码如下。

class AssetMultipleDetailView(LoginRequiredMixin, UserPassesTestMixin, DetailView):
    model = Asset
    context_object_name = 'asset'
    template_name = 'asset/asset_multiple_detail.html'

    def test_func(self):
        asset_multiple = self.get_object()
        if self.request.user == asset_multiple.owner:
            return True
        return False

    def get_context_data(self, **kwargs):
        context = super(AssetMultipleDetailView, self).get_context_data(**kwargs)
        context['tenants'] = Tenant.objects.filter(asset=context['asset']).order_by('created')
        context['services'] = Service.objects.filter(asset=context['asset']).order_by('created')
        return context

当您单击“添加新租户”按钮时,我在 tenant / urls.py

中使用以下URL
path('new/asset/<int:pk>/', TenantAssetCreateView.as_view(), name='tenant_asset_create'),

此URL为租户生成一个CreateView。我使用URL中资产的主键仅将正确的资产加载到“资产选择”字段中。请参见下图。

enter image description here

一切正常。

我想知道这是否是实现此目标的最佳方法?这会很容易维护吗,因为有更多类似于该应用程序即将发布的视图。

任何建议都非常感谢。预先谢谢你。

1 个答案:

答案 0 :(得分:1)

我不太确定您的模型是什么样的。租户与资产是否有很多关系(租户可以与任何数量的资产相关)?还是租户在您的设计中拥有资产的外键(租户恰好具有一项相关资产)?基于屏幕截图,我认为是后者。
还是您要资产仅拥有一个租户(资产到租户的外键)?

从URL加载正确的资产是完全有效的。您可能应该禁用资产形式的资产,以便无法对其进行操作。

在CreateView中,您可以覆盖form_valid(self,form)以将self.object.asset设置为所需的那个。