と呼ばれるモデルに入れたいlimit_choices_to
のですが、誰が(M2M)の一部である必要があるかによって制限され、それはからです。ForeignKey(User)
Order
User
User
Place.owner
Place
Order.place
申し訳ありませんが、それはおそらく本当に混乱していたので、いくつかのモデルを紹介します。
最初Order
:
class Order(models.Model):
creator = models.ForeignKey(User, related_name='order_creator')
place = models.ForeignKey(Place, related_name='order_place')
quote = models.DecimalField(max_digits=8, decimal_places=2, null=True, blank=True)
quote_owner = models.ForeignKey(User, related_name='order_quote_owner', limit_choices_to=Q(userprofile__user_types__name='po'), null=True, blank=True)
現在、ご覧のとおり、私はlimit_choices_to
単にpo
inUserProfile.user_types.name
する必要があります(そのユーザーはプロパティの所有者です)。しかし、それは一時的な解決策にすぎません。は、見積もりを承認できる人quote_owner
を指定するフィールドです。User
言い換えると、プロパティの所有者は、プロパティの所有者が所有する場所の注文の見積もりを承認できる必要があります。
これが私の野生の(間違った)推測です:
quote_owner = models.ForeignKey(User, related_name='order_quote_owner', limit_choices_to=Q(place_set=self.place), null=True, blank=True)
少し複雑なのは、それOrder.quote_owner
がオプションであるということですPlace.owners
。limit_choices_to
場所に所有者が指定されていない場合、黙って失敗する(そして選択肢を与えない)のに十分賢いことができますか?
とにかく、ここにありますPlace
:
class Place(models.Model):
name = models.CharField(max_length=135)
owners = models.ManyToManyField(User, related_name='place_owners' , limit_choices_to={'userprofile__user_types': 'po'}, null=True, blank=True)
ここにありUserProfile
ます:
class UserProfile(models.Model):
user = models.OneToOneField(User)
user_types = models.ManyToManyField(UserType, related_name='userprofile_user_types', null=True, blank=True)
place = models.ForeignKey(Place, related_name='userprofile_place', null=True, blank=True)
そして最後にここにありますUserType
:
class UserType(models.Model):
TYPE_CHOICES = (
('ad', 'administrator' ), # 1
('mo', 'moderator' ), # 2
('vi', 'viewer' ), # 3
('pm', 'property manager'), # 4
('po', 'property owner' ), # 5
('vm', 'vendor manager' ), # 6
('ve', 'vendor' ), # 7
('te', 'tenant' ), # 8
)
name = models.CharField(max_length=2, choices=TYPE_CHOICES)
とUserType
の間のM2M関係が必要だったので、個別のテーブルとして保持しました。User
UserType
choices
提案やヒントを歓迎し、感謝します。前もって感謝します!