0

次のような User、UserClient、および Client モデルがあります。

1 つのクライアントに多くのユーザーを含めることができます。

  class Client(models.Model):

    user = models.OneToOneField(User)

    # Which company the client represents
    company = models.CharField(max_length=200, null=True)

    # Address of the company
    address = models.CharField(max_length=200, null=True)

    company_size = models.ForeignKey(CompanySize, null=True)

    account_type = models.ForeignKey(AccountType)

    billing_address = models.CharField(max_length=254, null=True)

    # Billing Information of the client

    def __unicode__(self):
        return self.user.username

class ClientUser(models.Model):

    user = models.OneToOneField(User)
    client = models.ForeignKey(Client)

    def __unicode__(self):
        return self.user.email

テンプレートでは、次のようにします。

{% if user.is_client %}

{{ do_this }}

これを行う方法?

4

1 に答える 1

1

テンプレートの「ユーザー」がdjango.contrib.auth.Userインスタンスであると仮定すると、is_client()メソッドを追加する最も簡単なソリューションUserは、 monkeypatchUserです。

# youmodels.py
from django.contrib.auth.models import User

# your models here...

def user_is_client(user):
    try:
        client = user.client
    except Client.DoesNotExist:
        return False
    else:
        return True

User.is_client = user_is_client

ただし、schneck がコメントしたように、django のバージョンが十分に新しい場合は、カスタム User モデルを使用する方がよい場合があります。

于 2013-10-01T09:05:50.827 に答える