0

我有一个 Django 应用程序,其中用户可以安排命令行“作业”在远程系统上运行。这是我的 models.py 定义 Job 和外键关系

class Job(models.Model):
    name = models.CharField(max_length = 250, null = False, blank = False)
    user = models.CharField(max_length = 30, null = False, blank = False)
    command = models.CharField(max_length = 1000, null = False, blank = False)
    whenToRun = models.DateTimeField('Run Date', null = False, blank = False)
    output = models.CharField(max_length = 100000, null = True, blank = True)

class Host(models.Model):
    job = models.ForeignKey(Job)
    name = models.CharField(max_length = 100, null = False, blank = False)
    hasRun = models.BooleanField(default = False)

接下来,我有一段代码,其中包含一些 POST 数据,指示要添加到 Job 的一些主机(主机表示用户希望运行在 Host 实例连接到的 Job 实例中指定的命令的各个主机名)。

hostNames = list()
for p in request.POST:
    if "Host" in p: #Host is put in the input name attribute in the template as a sentinel
        hostNames.append(request.POST[p])
selected = getCheckedJobs() #a list of the jobs to add this host to

现在我已经组合了名称和要添加它们的作业,我意识到我不知道如何获取 Job 实例并添加与之关联的 Host 实例。谁能告诉我该怎么做?提前感谢您的帮助。

4

1 回答 1

2

你确定你有正确的关系结构吗?使用 Host 上的外键,每个作业可以有多个主机,但每个主机只能有一个作业。您的评论说“要将此主机添加到的作业列表” - 这种关系是不可能的。

如果是正确的 - 您需要获取您的 Host 实例,然后将其job属性分配为 Job 实例并保存 Host 实例。就像是:

# assume selected_job is the job instance
try:
    host = Host.objects.get(name=hostname)
except ObjectDoesNotExist:
    # do something here to handle an unmatched hostname
    pass
host.job = selected_job
host.save()
于 2013-06-21T18:58:06.033 回答