DetailView с данными двух других моделей - PullRequest
0 голосов
/ 29 апреля 2019

Я хотел бы получить совет от сообщества.

Я недавно начал изучать Django, и у меня возник вопрос относительно структуры приложения.

У меня есть URL http://127.0.0.1:8000/asset/2/, DetailView для моей модели активов, в котором также есть два блока карт, в которых хранятся данные для двух других моделей: Арендатор и Сервис. Проверьте скриншот ниже.

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

Когда вы нажимаете кнопку Добавить нового арендатора, я использую приведенный ниже URL в tenant / urls.py

path('new/asset/<int:pk>/', TenantAssetCreateView.as_view(), name='tenant_asset_create'),

Этот URL-адрес создает CreateView for Tenant. Я использую первичный ключ актива в URL, чтобы загрузить только правильный актив в поле выбора актива. Пожалуйста, смотрите изображение ниже.

enter image description here

Все работает хорошо.

Я хотел бы знать, является ли это лучшим способом для достижения этой цели? Будет ли это легко обслуживаться, так как в приложении есть больше представлений, похожих на это.

Любой совет очень ценится. Заранее спасибо.

1 Ответ

1 голос
/ 29 апреля 2019

Я не совсем уверен, как выглядят ваши модели.Имеет ли арендатор многозначное отношение к активу (арендатор может быть связан с любым количеством активов)?Или у арендатора есть внешний ключ к активу в вашем проекте (у арендатора есть ровно один связанный актив)?Основываясь на скриншоте, я предполагаю последнее.
Или вы хотите, чтобы актив имел только одного арендатора (внешний ключ для актива арендатору)?

Загрузка правильного ресурса с URL-адреса вполне допустима.Возможно, вам следует отключить актив в форме, чтобы им нельзя было манипулировать.

В CreateView вы можете переопределить form_valid(self,form), чтобы установить self.object.asset на тот, который вам нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...