如何从具有外键关系的另一个模型中检索模型列表



我是一名初级开发人员,致力于构建一个应用程序,为每个员工保存资产

员工可以拥有许多资产

员工只能查看自己的资产列表

class Category(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name

class Asset(models.Model):
name = models.CharField(max_length=50)
# added_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='asset_added_by')
description = models.TextField()
categories = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='asset_categories')
image = models.ImageField(upload_to='asset_images', null=True, blank=True)
stock =models.IntegerField()
def __str__(self):
return self.name

class Department(models.Model):
name = models.CharField(max_length=50)
number_of_employees = models.IntegerField()
def __str__(self):
return self.name    

class Employee(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,)
department = models.ForeignKey(Department, on_delete=models.CASCADE,)
image = models.ImageField(upload_to='employee_image', null=True, blank=True)
def __str__(self):
return self.user.username   
class Registration(models.Model):
employees = models.ForeignKey(Employee, on_delete=models.CASCADE,)
assets = models.ForeignKey(Asset, on_delete=models.CASCADE,)
date_from = models.DateField()
date_to = models.DateField()

我对人际关系感到困惑,这是正确的吗?

如何获取每个员工的资产清单?

Asset一个外键关系Employee?然后,默认情况下,员工的资产被引用为Employee.asset_set.all()

如果一个资产可以有很多员工,也可以有一个员工有很多资产,那么它是一个多对多关系,而不是一个外键。

防止一名员工看到其他员工的资产是限制视图的问题。我会想象资产列表视图将检索链接到当前登录用户的员工,如果这就是用户模型

听起来你现在并没有真正掌握模型关系,或者特别是你的模型应该如何相关。您是否尝试过创建一种形式的关系图?即显示对象之间线条的绘图(您可以只在纸上执行此操作(。(例如,您可以查看UML类图(

无论如何,您尝试设置的内容如下所示:

User  -<-  Employee  ->  Department
|    
^
|
Category -<- Asset

我在这里假设每个资产只能属于 1 名员工。如果这确实是你想要的,Nigel222 所说的几乎是正确的,尽管你应该在资产对象处写下关系 (employee=models.ForeignKey(Employee, on_delete=models.CASCASDE)(。 如果不是这种情况,您应该添加一个 ManyToManyField。assets = models.ManyToManyField(Asset, on_delete=models.CASCADE)

相关内容

最新更新