Python 在依赖于该模型类中的可选字段的ForeignKey中将\u选项\u限制为
我想Python 在依赖于该模型类中的可选字段的ForeignKey中将\u选项\u限制为,python,django,django-models,Python,Django,Django Models,我想在一个名为Order的模型中将用户的选择限制为ForeignKey(User),其中用户受用户的限制,该用户必须是Place.owner(M2M)的一部分,而Place则来自Order.Place 抱歉,这可能真的让人困惑,所以我将向您展示一些模型 第一批订单: class Order(models.Model): creator = models.ForeignKey(User, related_name='order_creator') place =
在一个名为Order
的模型中将用户
的选择限制为ForeignKey(User)
,其中用户
受用户
的限制,该用户必须是Place.owner
(M2M)的一部分,而Place
则来自Order.Place
抱歉,这可能真的让人困惑,所以我将向您展示一些模型
第一批订单
:
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)
如您所见,目前我在UserProfile.user\u types.name
中有limit\u choices\u to
,仅将po
限制为。但这只是暂时的解决办法。quote\u owner
是一个字段,指定哪个用户可以批准报价
换句话说,酒店所有者必须能够批准其所在地的订单报价。
以下是我疯狂(不正确)的猜测:
有点复杂的是,Order.quote\u owner
是可选的,Place.owner
也是可选的。如果没有为某个地方指定的所有者,是否可以将选择限制为
足够聪明地默默地失败(并且不给出任何选择)
不管怎样,这里是地方
:
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)
以下是用户配置文件
:
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
保留为一个单独的表,因为我想在User
和UserType
之间建立一个M2M关系,这个关系仍然受到选项的限制
我欢迎并感谢任何建议或提示提前谢谢据我所知,这里不能使用限制选项。您需要限制字段queryset
我以前在使用泛型视图时已经这样做过,下面是代码:
# This class extends a generic view, but this can be any view.
class RelationCreateView(CreateView):
def get_form(self, form_class):
# Find all entities a user can promote within, and limit to those.
form.fields['entity'].queryset = <SOME QUERYSET>
return form
#该类扩展了通用视图,但它可以是任何视图。
类关系CreateView(CreateView):
def get_表单(自身、表单类):
#查找用户可以在其中升级的所有实体,并限制这些实体。
form.fields['entity'].queryset=
报税表
在更简单的视图示例中:
def view_method():
...
form.fields['field_name'].queryset = <SOME QUERYSET>
def view_方法():
...
form.fields['field_name'].查询集=
def view_method():
...
form.fields['field_name'].queryset = <SOME QUERYSET>