1

私のモデルでは、ジョブのリストがあり、各ジョブはユーザーのサブセット (ManyToManyField) によってのみ実行できます。その後、ユーザーはジョブ リクエストを送信し、ジョブを実行できるユーザーのサブセットから誰かにジョブを割り当てることができます。

class Job(models.Model):
    ...
    users = models.ManyToManyField(User)

class Job_Request(models.Model):
    ...
    job = models.ForeignKey(Job)
    assigned_to = models.ForeignKey(User)

次に、ModelForm を使用してフォームを作成し、人々が仕事の依頼を編集して、他の人に仕事を再割り当てできるようにしました。私の問題は、ModelForm がフォームの「assigned_to」フィールドのメニューを作成し、すべてのユーザーをリストすることです。そのジョブを実行できるユーザーのサブセットのみを表示したいのです。これどうやってするの?

以下は私のforms.pyです。ここで、assigned_toフィールドをジョブを実行できるユーザーのサブセットに設定しようとしましたが、正しい構文がわかりません。以下は、空のメニューを作成するため、明らかに間違っています。フォームまたはテンプレートでこれを行うにはどうすればよいですか? ありがとう。

class EditJobRequestForm(ModelForm):
    def __init__(self,  *args, **kwargs):
        super(EditJobRequestForm, self).__init__(*args, **kwargs)
        self.fields['assigned_to'].queryset =
            User.objects.filter(username__in=self.instance.job.users.all()]
4

2 に答える 2

1
self.fields['assigned_to'].queryset = self.instance.job.users.all() 

モデルをフォームに送信する前に、ジョブをインスタンスに設定する必要があることに注意してください

于 2013-01-20T11:01:00.763 に答える
0
        User.objects.filter(username__in=self.instance.job.users.all()]

ユーザー名とPKに対してクエリを実行しています。もちろん、一致するものはありません。

        User.objects.filter(pk__in=self.instance.job.users.all()]
于 2013-01-19T17:12:45.383 に答える