我在业余时间学习Django(和编程)。这是有趣的,但我有一个问题,如何在逻辑上区分两个模型,共享一个家长。你知道吗
我想做的是有一个表格,我可以输入一台机器和一个文件发送它。我的问题是,我有两种类型的机器(它们是RS-232通信)这些机器要么有硬件流控制要么有软件流控制。你知道吗
我已经设置了一个url/transmitProgram/来获取输入的表单数据并将其发送到适当的位置。我不知道如何选择正确的机器设置。你知道吗
OfficeMachine是硬件流控制的机器,而GarageMachine是软件流控制的机器
我在表格中发送文件001到OfficeMachine(如何知道OfficeMachine是软件还是硬件)
你知道吗型号.py你知道吗
class SerialMachine(models.Model):
EVEN = 1
ODD = 2
NONE = 3
PARITY_CHOICES = (
(EVEN, "Even"),
(ODD, "Odd"),
(NONE, "None"),
)
machineName = models.CharField(max_length=50)
address = models.CharField(max_length=100)
baudRate = models.IntegerField(max_length=50)
parity = models.IntegerField(max_length=1, choices=PARITY_CHOICES)
dataBits = models.IntegerField(max_length=15)
stopBits = models.IntegerField(max_length=15)
carriageReturn = models.BooleanField(default=False)
lineFeed = models.BooleanField(default=True)
endProgramChar = models.BooleanField(default=True)
machineServer = models.ForeignKey('SerialPortServer')
repository = models.ForeignKey('Repository')
class Meta:
abstract = True
def __unicode__(self):
return self.machineName
class HardwareFlowControlMachine(SerialMachine):
"""
Represents all CNC machines that are to be connected for a hardware flow
control connection
"""
enableRTSCTS = models.BooleanField(default=False) # RTS/CTS Flow Control
enableDSRDTR = models.BooleanField(default=True) # DSR/DTR Flow Control
class SoftwareFlowControlMachine(SerialMachine):
""""
Represents all CNC machines that are to be connected for a software flow
control connection
"""
xonChar = models.IntegerField(max_length=2, default=17)
xoffChar = models.IntegerField(max_length=2, default=19)
我的视图从表单中获取数据,并调用helper函数来获取路径和机器设置。你知道吗
你知道吗助手.py你知道吗
def getMachineSettings(machine):
from django.core.exceptions import ObjectDoesNotExist
from src.apps.cnc.models import SoftwareFlowControlMachine, HardwareFlowControlMachine
machineSettings = ""
try:
machineSettings = SoftwareFlowControlMachine.get(name_iexact='%s' % machine)
except ObjectDoesNotExist:
pass
if machineSettings == "":
try:
machineSettings = HardwareFlowControlMachine.get(name_iexact='%s' % machine)
except ObjectDoesNotExist:
pass
return machineSettings
但这似乎是个愚蠢的方法。这篇帖子(link)把我介绍到djangosnippets网站。你知道吗
我在看this snippet,但我看不到所有东西都在一起。你知道吗
如果我在SerialMachine abstract类中添加inherit ParentModel并创建一个ChildManager,我可以说
machineSettings = SerialMachine.get(name_iexact'%s' % machine)
从继承类中的字段中可以找到我吗?你知道吗
非常感谢你能为我提供的帮助和信息
请参阅django-model-utils中的InheritanceManager,也许它会满足您的需要。你知道吗
根据您的需求范围,可能需要第三方软件包,如@yedpodtrzitko suggest。但是,通过利用Django处理MTI(Multiple Table inheritation)的方式,这可以简单地完成,而不需要额外的机器。
SerialMachine
的每个实例都有一个属性,该属性以用于创建它的任何子类命名。基于此,只需测试属性是否存在,就可以从父级获取子类:然后,只要在需要特定机器类型的地方使用
machine.child
。(当然,您可以将属性的名称更改为任何您喜欢的名称。你知道吗相关问题 更多 >
编程相关推荐