什么 model/approach 用来关联 space 和 django 中的对象
What model/approach to use to relate space and objects in django
我正在尝试使用 django,所以我已经开始为我遇到的一个老问题创建一个“解决方案”。
我在 OO 编程和模型关系方面的背景并不多,所以我要求 ideas/paths/solutions 如何实现我的目标。
我的问题:
我需要定义空间对象并关联它们
例如:1 号楼,里面有 1 楼和 2 楼,2 楼里面有房间 A 和 B
在每种类型的“位置”我都会放置“东西”
例如:在 1 号楼放置 1 个摄像头;在2楼放置1个摄像头;在B房间放置1个摄像头
所以我可以将结果存档如下:
1号楼:3个摄像头
2楼:2个摄像头
B房间:1个摄像头
我计划使用旧方法 table 对每种对象(建筑物、地板、房间)进行归档,但我对如何以相同的方式处理不同的东西有点困惑方式(动作)特别是因为在处理完这个之后我必须把“人”放在等式中,即我可以把人 J 放在房间 2 并在他身上放一个摄像头。
我提前感谢大家的所有想法(即使是说忘记它并编码它)因为我在这里有点迷路:)
抱歉,如果这不是正确的方式(第一个 post):
@Amun_Re
我的文字不太好,尤其是英语。您 post 在我的第一个数据库对象关系中编辑的模型,但在发现多对多关系后我在想(因为我需要将对象放在房间、地板和建筑物中,它们是不同的)django/python 有更好的方法来处理这个问题。
我会尝试 post 我为这个阶段设计的图像。
好吧,在重新考虑所有事情之后,我尝试从 OO 的角度来看。如果他们要被同等对待,他们至少需要来自同一个地方。
现在我有一个 class“对象”,所有其他 classes 都继承自(建筑物、楼层、人...),但现在我遇到了一个问题,当我尝试放置一个人时在建筑物上我收到错误:
from django.db import models
from numpy import source
from objects.models import Asset, Object
# Create your models here.
class UseType(models.Model):
name = models.CharField(max_length=100, unique=True)
def __str__(self):
return str(self.name)
class Placement(models.Model):
my_usetype = models.ForeignKey(UseType, on_delete=models.CASCADE)
my_source = models.ForeignKey(Object, on_delete=models.CASCADE)
my_destination = models.ForeignKey(Object, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.created)
我能做到吗?或者我应该只使用整数字段而不是外键然后只在表单上更新?
TIA
尝试从这个开始:
models.py:
class Building(models.Model):
#Building 1, 2 etc... Use Charfield if you want string name
building_name = models.IntegerField()
def __str__(self):
return '{}'.format(self.building_name)
class Room(models.Model):
#One Building can have many rooms -> One to many relationship -> Foreignkey
building = models.ForeignKey(Building, on_delete=models.CASCADE)
room_name = models
def __str__(self):
return '{}'.format(self.room_name)
#Since you want to put items such as camera on Objects (person can also be an object):
class ObjectInRoom(models.Model):
room = models.ForeignKey(Room)
object_in_room_name = models.CharField(max_length=256)
def __str__(self):
return '{}'.format(self.object_in_room_name)
#Items such as camera etc.
class ItemOnObject(models.Model):
object_in_room = models.ForeignKey(ObjectInRoom, on_delete=models.CASCADE)
item_on_object_name = models.CharField(max_length=256)
def __str__(self):
return '{}'.format(self.item_on_object_name)
admin.py:
from django.contrib import admin
from .models import Building, Room, ObjectInRoom, ItemOnObject
# Register your models here.
admin.site.register(Building)
admin.site.register(Room)
admin.site.register(ObjectInRoom)
admin.site.register(ItemOnObject)
不要忘记在控制台中使用 python manage.py makemigrations
和 python manage.py migrate
进行迁移。
您可以通过 运行 使用 python manage.py runserver
服务器并登录 /admin
来测试您的模型。如果您还没有,请创建一个超级用户以便能够使用 python manage.py createsuperuser
.
登录管理站点
relational draft
上图是我的第一个设计,现在我稍微修改了一下,因为我发现一些“stuff/library”在 python/django 中工作不同。
让我试着更好地解释一下我的疑惑:
有没有一种方法可以将对象(如相机)与其他不同类型的对象(建筑物、房间、人)相关联,而无需为此添加额外的代码?
注意:因为我刚刚开户,所以有很多事情我不能做:)抱歉打乱了我自己的问题。
我找到了解决方案。
class Placement(models.Model):
my_usetype = models.ForeignKey(UseType, on_delete=models.CASCADE)
my_source = models.ForeignKey(Object, on_delete=models.CASCADE, related_name='source')
my_destination = models.ForeignKey(Object, on_delete=models.CASCADE, related_name='destination')
只需添加 related_name :)
我正在尝试使用 django,所以我已经开始为我遇到的一个老问题创建一个“解决方案”。 我在 OO 编程和模型关系方面的背景并不多,所以我要求 ideas/paths/solutions 如何实现我的目标。
我的问题:
我需要定义空间对象并关联它们 例如:1 号楼,里面有 1 楼和 2 楼,2 楼里面有房间 A 和 B
在每种类型的“位置”我都会放置“东西” 例如:在 1 号楼放置 1 个摄像头;在2楼放置1个摄像头;在B房间放置1个摄像头
所以我可以将结果存档如下: 1号楼:3个摄像头 2楼:2个摄像头 B房间:1个摄像头
我计划使用旧方法 table 对每种对象(建筑物、地板、房间)进行归档,但我对如何以相同的方式处理不同的东西有点困惑方式(动作)特别是因为在处理完这个之后我必须把“人”放在等式中,即我可以把人 J 放在房间 2 并在他身上放一个摄像头。
我提前感谢大家的所有想法(即使是说忘记它并编码它)因为我在这里有点迷路:)
抱歉,如果这不是正确的方式(第一个 post): @Amun_Re 我的文字不太好,尤其是英语。您 post 在我的第一个数据库对象关系中编辑的模型,但在发现多对多关系后我在想(因为我需要将对象放在房间、地板和建筑物中,它们是不同的)django/python 有更好的方法来处理这个问题。 我会尝试 post 我为这个阶段设计的图像。
好吧,在重新考虑所有事情之后,我尝试从 OO 的角度来看。如果他们要被同等对待,他们至少需要来自同一个地方。 现在我有一个 class“对象”,所有其他 classes 都继承自(建筑物、楼层、人...),但现在我遇到了一个问题,当我尝试放置一个人时在建筑物上我收到错误:
from django.db import models
from numpy import source
from objects.models import Asset, Object
# Create your models here.
class UseType(models.Model):
name = models.CharField(max_length=100, unique=True)
def __str__(self):
return str(self.name)
class Placement(models.Model):
my_usetype = models.ForeignKey(UseType, on_delete=models.CASCADE)
my_source = models.ForeignKey(Object, on_delete=models.CASCADE)
my_destination = models.ForeignKey(Object, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.created)
我能做到吗?或者我应该只使用整数字段而不是外键然后只在表单上更新?
TIA
尝试从这个开始:
models.py:
class Building(models.Model):
#Building 1, 2 etc... Use Charfield if you want string name
building_name = models.IntegerField()
def __str__(self):
return '{}'.format(self.building_name)
class Room(models.Model):
#One Building can have many rooms -> One to many relationship -> Foreignkey
building = models.ForeignKey(Building, on_delete=models.CASCADE)
room_name = models
def __str__(self):
return '{}'.format(self.room_name)
#Since you want to put items such as camera on Objects (person can also be an object):
class ObjectInRoom(models.Model):
room = models.ForeignKey(Room)
object_in_room_name = models.CharField(max_length=256)
def __str__(self):
return '{}'.format(self.object_in_room_name)
#Items such as camera etc.
class ItemOnObject(models.Model):
object_in_room = models.ForeignKey(ObjectInRoom, on_delete=models.CASCADE)
item_on_object_name = models.CharField(max_length=256)
def __str__(self):
return '{}'.format(self.item_on_object_name)
admin.py:
from django.contrib import admin
from .models import Building, Room, ObjectInRoom, ItemOnObject
# Register your models here.
admin.site.register(Building)
admin.site.register(Room)
admin.site.register(ObjectInRoom)
admin.site.register(ItemOnObject)
不要忘记在控制台中使用 python manage.py makemigrations
和 python manage.py migrate
进行迁移。
您可以通过 运行 使用 python manage.py runserver
服务器并登录 /admin
来测试您的模型。如果您还没有,请创建一个超级用户以便能够使用 python manage.py createsuperuser
.
relational draft
上图是我的第一个设计,现在我稍微修改了一下,因为我发现一些“stuff/library”在 python/django 中工作不同。
让我试着更好地解释一下我的疑惑: 有没有一种方法可以将对象(如相机)与其他不同类型的对象(建筑物、房间、人)相关联,而无需为此添加额外的代码?
注意:因为我刚刚开户,所以有很多事情我不能做:)抱歉打乱了我自己的问题。
我找到了解决方案。
class Placement(models.Model):
my_usetype = models.ForeignKey(UseType, on_delete=models.CASCADE)
my_source = models.ForeignKey(Object, on_delete=models.CASCADE, related_name='source')
my_destination = models.ForeignKey(Object, on_delete=models.CASCADE, related_name='destination')
只需添加 related_name :)