作者:手机用户2502924593 | 来源:互联网 | 2023-09-11 02:20
我是一名初级开发人员,负责构建一个将资产保存到每个员工的应用程序
员工可以拥有很多资产
员工只能看到自己的资产列表
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,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,)
department = models.ForeignKey(Department,)
image = models.ImageField(upload_to='employee_image',blank=True)
def __str__(self):
return self.user.username
class Registration(models.Model):
employees = models.ForeignKey(Employee,)
assets = models.ForeignKey(Asset,)
date_from = models.DateField()
date_to = models.DateField()
我对人际关系感到困惑吗?
如何获取每个员工的资产清单?
授予Asset
与Employee
的ForeignKey关系?然后,默认情况下,员工的资产被引用为Employee.asset_set.all()
。
如果资产既可以有很多员工,也可以有很多资产,那么它的ManyToMany关系就不是ForeignKey。
让一个员工看不到另一名员工的资产只是限制视图的问题。我可以想象,如果这是用户模型,那么资产列表视图将检索链接到当前登录用户的Employee。
,
听起来像现在您还没有真正掌握模型关系,或者确切地说您应该如何关联模型。您是否尝试过创建关系图的形式?即显示对象之间线条的图形(您可以在纸上完成此操作)。 (例如,您可以研究chromedriver download page)
无论如何,您要设置的内容如下:
User -<- Employee -> Department
|
^
|
Category -<- Asset
我在这里假设每个资产只能属于1名员工。如果确实是您想要的,则Nigel222所说的几乎是正确的,尽管您应将关系写在资产对象上(employee=models.ForeignKey(Employee,on_delete=models.CASCASDE)
)。
如果不是这种情况,则应改为添加ManyToManyField。
assets = models.ManyToManyField(Asset,on_delete=models.CASCADE)