Я учу Джанго (и программирование) в свободное время.Это забавно, но у меня возникла проблема с тем, как логически провести различие между двумя моделями с общим родителем.
Что я хотел бы сделать, так это иметь форму, в которой я могу ввести машину и файл дляОтправь это.У меня проблема в том, что у меня есть два типа машин (это связь по RS-232). Эти машины имеют аппаратное или программное управление потоком.
Я установил URL / TransferProgram /, чтобы взять введенные данные формы и отправить их в нужное место.Я не знаю, как правильно выбрать параметры машины.
OfficeMachine - это аппаратная машина с управлением потоком, а GarageMachine - программная система с управлением потоком
Я отправляю свою форму для отправки файла 001 в OfficeMachine (какчтобы узнать, является ли OfficeMachine программным или аппаратным обеспечением)
Models.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
Хотя это кажется глупым способом сделать это.Этот пост (ссылка) познакомил меня с сайтом djangosnippets.
Я смотрел на этот фрагмент , но я довольно слаб в том, чтобы увидеть, что все сходится вместе.
Правильно ли я понимаю, что если я добавлю наследовать ParentModel в мой SerialMachine absractКласс и создать ChildManager, который я мог бы просто сказать
machineSettings = SerialMachine.get(name_iexact'%s' % machine)
и из полей в унаследованных классах будет там для меня?
Большое спасибо за помощь и информацию, которую вы можете предоставить длямне