0

ユーザーがコマンドライン「ジョブ」をリモートシステムで実行するようにスケジュールできるDjangoアプリがあります。これが、Job と外部キーの関係を定義する models.py です。

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)

次に、Job に追加するホストを示す POST データを含むコード ブロックがあります (ホストは、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

適切な関係構造を持っていると確信していますか? ホストの外部キーを使用すると、各ジョブは多くのホストを持つことができますが、各ホストは 1 つのジョブしか持つことができません。あなたのコメントには、「このホストを追加するジョブのリスト」と書かれていますが、これはこの関係では不可能です。

それが正しい場合 - 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 に答える