Django - Доступ к значениям внешнего ключа для сохранения в словарь - PullRequest
0 голосов
/ 21 октября 2019

В Django я хотел бы создать словарь из значений модели, который также включает значения внешнего ключа.

Так, например, у меня есть 2 модели:

- модели. py -

class Item(models.Model):
    item_name = models.CharField(max_length=255)
    item_description = models.CharField(max_length=255)

class Inventory(models.Model):
    inventory_name = models.CharField(max_length=255)
    inventory_date = models.DateTimeField(default=timezone.now)
    inventory_item = models.ForeignKey(Item, on_delete=models.DO_NOTHING)

(не лучшие примеры имен переменных, поскольку это может быть отношение многих ко многим, но вы понимаете, в чем дело)

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

- urls.py -

urlpatterns = [
    path('details/<int:pk>/', views.GenerateDetails, name='details'),
]

Теперь вот у меня проблемы.

Я пытаюсь создать словарь из модели Inventory, который также будет иметь значения ForeignKey из Item.

- views.py -

class GenerateDetails(View):

    def get(self, request, *args, **kwargs):

        inventory_data = Inventory.objects.get(pk=self.kwargs.get('pk'))

        # Create dictionary from selected contract_data
        inventory_data_dict = model_to_dict(inventory_data)

        ...

        return response

Из этого решения единственным значением ForeingKey, которое сохраняет словарь, является Item__id и все.

Я бы хотел, чтобы в словаре были сохранены все данные для инвентаризации, а также Item__name и Item__description.

1 Ответ

0 голосов
/ 21 октября 2019
Inventory.objects.filter(self.kwargs.get('pk')).values('inventory_name', 'inventory_date', 'inventory_item__item_name', 'inventory_item__ item_description').first()

И я предлагаю вам использовать более короткое имя для таких полей, как имя, вместо item_name и item_description, и просто использовать предмет, а не инвентарь, вы уже знаете, что предмет - FK для инвентаря

...