我想从社区中获得一些建议。
我已经开始学习Django,并对应用程序的结构有疑问。
我有一个URL http://127.0.0.1:8000/asset/2/,这是我的Asset模型的DetailView,它也有两个卡块,用于容纳其他两个模型Tenant和Service的数据。查看下面的屏幕截图。
我正在从 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
中使用以下URLpath('new/asset/<int:pk>/', TenantAssetCreateView.as_view(), name='tenant_asset_create'),
此URL为租户生成一个CreateView。我使用URL中资产的主键仅将正确的资产加载到“资产选择”字段中。请参见下图。
一切正常。
我想知道这是否是实现此目标的最佳方法?这会很容易维护吗,因为有更多类似于该应用程序即将发布的视图。
任何建议都非常感谢。预先谢谢你。
答案 0 :(得分:1)
我不太确定您的模型是什么样的。租户与资产是否有很多关系(租户可以与任何数量的资产相关)?还是租户在您的设计中拥有资产的外键(租户恰好具有一项相关资产)?基于屏幕截图,我认为是后者。
还是您要资产仅拥有一个租户(资产到租户的外键)?
从URL加载正确的资产是完全有效的。您可能应该禁用资产形式的资产,以便无法对其进行操作。
在CreateView中,您可以覆盖form_valid(self,form)
以将self.object.asset
设置为所需的那个。