저는 자유 시간에 장고 (및 프로그래밍)를 배우고 있습니다. 재미 있지만 부모를 공유하는 두 모델을 논리적으로 구분하는 방법에 문제가 있습니다.적절한 하위 클래스 선택
내가하고 싶은 것은 컴퓨터와 파일을 입력 할 수있는 양식을 작성하는 것입니다. 내가 가지고있는 문제는 두 가지 유형의 기계 (RS-232 통신)입니다.이 기계에는 하드웨어 흐름 제어 또는 소프트웨어 흐름 제어가 있습니다.
url/transmitProgram /을 입력하여 양식 데이터를 가져 와서 적절한 위치로 보내도록 설정했습니다. 올바른 컴퓨터 설정을 선택하는 방법을 모르겠습니다.
OfficeMachine 하드웨어 흐름 제어 기계 및 GarageMachine 소프트웨어 흐름이
내가
Models.py을 (OfficeMachine 소프트웨어 또는 하드웨어 인 경우 방법을 알고) OfficeMachine에 파일 001를 보내 내 양식을 보내
제어입니다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 absract 클래스 ParentModel을 상속 난 그냥 상속 된 클래스에서machineSettings = SerialMachine.get(name_iexact'%s' % machine)
과 필드에서 나를 위해있을 것입니다 말할 수있는 ChildManager을 만들 추가하면?
덕분에 당신이 나를
"도우미"라고 부르지 말고 "공장"이라고 말하면 사람들은 "공장"디자인 패턴에 더 익숙해집니다. 도우미는 무엇이든 의미 할 수 있습니다. 팩토리는 하위 클래스 객체를 만듭니다. –
고마워요. – Dan
기억하지 마십시오. 질문 수정. –