首页 > 解决方案 > Django Querying Relation

问题描述

the code did not return all of the item's name based on employee..? how to solve this probem? did the models wrong? or the query?

MODELS.PY

class Employee(models.Model):
    name = models.CharField(max_length=100)
    telephone_number = models.CharField(max_length=20)
    address = models.TextField()
    email = models.EmailField()


class Item(models.Model):
    code = models.CharField(max_length=4)
    name = models.CharField(max_length=100)
    kind = models.CharField(max_length=100)
    description = models.TextField()


class Inventory(models.Model):
    employee = models.ForeignKey(Employee, on_delete=models.CASCADE)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)

    def get_absolute_url(self):
        return reverse('inventaris-detail', kwargs={'pk': self.pk})

VIEWS.PY how can i get all of the employee's item ?

query_set = Inventory.objects.all()

    for query in query_set:
        output.append([
            query.employee.name,
            query.item.name
        ])

i need something like query.employee.items_set.all() .. ?

标签: pythondjango

解决方案


You want to get all of the items from an employee? The following should achieve that:

employee = Employee.objects.all()[0]  # Just get a random employee, you can do this with more employees too if you want
employees_items = [inventory.item for inventory in employee.inventory_set.all()]

Your code does not logically make a lot of sense though, to be honest. Most likely, there should be a field on a Item class which is a FK to Inventory. Your item class should probably be:

class Item(models.Model):
    code = models.CharField(max_length=4)
    name = models.CharField(max_length=100)
    kind = models.CharField(max_length=100)
    description = models.TextField()
    inventory = models.ForeignKey(Inventory, on_delete=models.CASCADE)

(Of course this will not work since Inventory is defined after this class, but you can just put Inventory above it or use one of the other many methods to solve this problem)

Good luck!


推荐阅读