0

django.contrib.auth認証に使用しています。このUserモードには、 と呼ばれるカスタム プロファイル モデルがありPersonnelます。Personnelという別のテーブルにリンクされていますCompany

class Personnel(models.Model):
    """
    Model for storing the personnel information
    """
    user = models.OneToOneField(
        User
    )
    company = models.ForeignKey(
        Company, null=False, verbose_name="Company"
    )

class Company(models.Model):
    """
    Model for storing the company information.
    """
    company_name = models.CharField(
        null=False, max_length=200, verbose_name="Company Name"
    )
  • ユーザーが認証されたら。ユーザーの会社を取得するにはどうすればよいですか? 何かのようなものrequest.user....

  • ビューでは、リクエストにアクセスできますが、フォームとモデルの変数にアクセスする必要がある場合request、リクエスト変数をフォーム/モデルに渡す必要がありますか、またはそれにアクセスする方法はありますか? これは、特定の の情報を保存する場合Company、それがPersonnel属する会社でなければならないためです。

4

3 に答える 3

1

から会社にアクセスできるはずですrequest.user.get_profile().companyジャンゴのドキュメントを参照してください。

オブジェクトが存在requestしないビューだけでなく、フォームが他の場所でもインスタンス化される可能性があるため、フォームに直接アクセスすることはできません。フォームを初期化するときに、現在のユーザーをフォームに渡すことができます (リクエストではなくユーザーrequestを渡す方が理にかなっているので、リクエストなしでも使用できます)。

class MyForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        super(MyForm, self).__init__(*args, **kwargs)

# in you view
form = MyForm(user=request.user)
于 2011-07-12T08:32:57.973 に答える
0

User から Company への直接リンクはありませんので、 を行う必要がありますrequest.user.personnel.company

request常に明示的に渡す必要があります。初期化時にフォーム内に保存し、後でアクセスできます。

class MyForm(forms.ModelForm):
  ... fields, meta, etc ...
  def __init__(self, *args, **kwargs):
    self.request = kwargs.pop('request', None)
    super(MyForm, self).__init__(*args, **kwargs)
于 2011-07-12T08:29:23.473 に答える
0

Company モデル インスタンスの場合、次を使用してすべての Personnel を取得できます (django モデルでの将来の参照のために、名前は単数形にする必要があります)。

company = Company.objects.get(id=some_company_id)
personnel = company.personnel_set.all()

特定の Personnel インスタンスがある場合:

person = request.user.get_profile()
company = person.company

あなたのフォームのために。フォームが現在のユーザーにアクセスする必要がある場合は、それを渡す必要があります。これを行うには、フォームのinit関数をオーバーライドします

class SomeForm(forms.Form):
    def __init__(self, user, *args, **kwargs):
         super(self, SomeForm).__init__(*args, **kwargs)
         self.user = user
于 2011-07-12T08:30:12.880 に答える