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>