Django таблицы соединения наборов запросов - PullRequest
0 голосов
/ 05 апреля 2020

Я действительно застрял с объединением двух таблиц.

У меня есть таблицы Item и Транзакции

class Item(models.Model):
    category_choices = []
    item_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)
    description = models.TextField()
    category = models.CharField(max_length=100, choices=category_choices)
    image = models.ImageField(upload_to='media')
    stock = models.IntegerField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    date_added = models.DateTimeField(default=timezone.now())

class Transactions(models.Model):
    transaction_id = models.AutoField(primary_key=True)
    order_id = models.UUIDField()
    item_id = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='transactions')
    quantity = models.IntegerField()
    price = models.DecimalField(max_digits=10, decimal_places=2)
    transaction_date = models.DateTimeField(auto_now_add=True)
    username = models.CharField(max_length=100)
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    address_str = models.CharField(max_length=100)
    address_plz = models.CharField(max_length=100)
    address_place = models.CharField(max_length=100)
    address_country = models.CharField(max_length=100, choices=[(name[1], name[1]) for name in countries])

Теперь я хочу отобразить шаблон с транзакциями и изображениями и информацией об элементах из модели Item. Я пытаюсь использовать prefetch_related, howeve rit не работает, и я не понимаю, как это должно быть решено.

def order_history(request):
    if request.user.is_authenticated:
        transaction = Transactions.objects.order_by('-transaction_date').\
            filter(username=request.user).prefetch_related('item')

        context = {'orders': transaction}
        template_name = 'retail/order_history.html'
        return render(request, template_name, context=context)
    else:
        raise Http404('You are not authorised')

1 Ответ

0 голосов
/ 05 апреля 2020

В вашей таблице транзакций назовите ваш столбец Item item вместо item_id:

item = models.ForeignKey(Item, on_delete=models.CASCADE, related_name='transactions')

Тогда ваш prefetch_related("item") будет работать так, как ожидалось.

...