Python 过滤Django ManyToMany字段中的初始数据

Python 过滤Django ManyToMany字段中的初始数据,python,django,modelform,manytomanyfield,Python,Django,Modelform,Manytomanyfield,我想过滤Django Manytomy字段中的数据 该应用程序可创建在某些场馆的某些房间内举行的会议 许多人可以创建会议,但一个人只能访问他创建的场地和房间 我的模型是(示例): 我正在应用程序中使用Django通用视图 我的问题是,如何仅过滤用户“用户a”以会议形式创建的特定房间。“用户A”看不到“用户B”创建的房间。 同样,如何仅选择在特定场地创建的房间而不选择所有房间? 我不想使用JavaScript 非常感谢您的回复。您可以从表单中覆盖查询集 #constructor from form

我想过滤Django Manytomy字段中的数据

该应用程序可创建在某些场馆的某些房间内举行的会议

许多人可以创建会议,但一个人只能访问他创建的场地和房间

我的模型是(示例):

我正在应用程序中使用Django通用视图

我的问题是,如何仅过滤用户“用户a”以会议形式创建的特定房间。“用户A”看不到“用户B”创建的房间。

同样,如何仅选择在特定场地创建的房间而不选择所有房间? 我不想使用JavaScript


非常感谢您的回复。

您可以从表单中覆盖查询集

#constructor from form
def __init__(self, *args, **kwargs):
    user = kwargs.pop('user', None)
    super(ObjectForm, self).__init__(*args, **kwargs)
    if user:
        self.fields['rooms'].queryset = Room.objects.filter(room__venue_creator=user)
您需要使用表单名称更改
ObjectForm

差不多吧。

@angle

class Room(models.Model):
    name = models.CharField(max_length=100)

class Venue(models.Model):
    creator = models.ForeignKey(User)
    name = models.CharField(max_length=100)
    rooms = models.ManyToManyField(Room, through="VenueRooms")

class VenueRooms(models.Model):
    venue = models.ForeignKey(Venue)
    room = models.ForeignKey(Room)

class Meeting(models.Model):
    name = models.CharField(max_length=100)
    venue = models.ForeignKey(Venue)
    room = models.ForeignKey(Room)

class MeetingForm(ModelForm):
    class Meta:
        model = Meeting
        fields = ('name', 'venue', 'room',)

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        print(user) # it prints None
        super(MeetingForm, self).__init__(*args, **kwargs)
这就是Meetinform的模型和模型表单,在这里我试图访问由特定用户创建的房间和venur的查询集。
我假设该用户是指经过授权的用户。这就像request.user;因此,通过在shell中打印user un,我应该知道经过身份验证的用户的名称。

谢谢@Angel Cruijff的退出回复。我尝试过你的建议,我也读过很多其他的芭蕾舞曲,它们和你的一模一样。不幸的是,它对我不起作用。恐怕我失去了一些东西。我试图通过在“user=kwargs.pop('user',None')行之后添加print('user is:',user')来跟踪代码,它在终端中打印“None”。所以,我无法访问用户。我尝试通过以下方式导入用户:from django.contrib.auth.models导入用户。但这没有帮助。有什么线索可以解决这个问题吗?房间和创建者@rufinhunkpe之间的关系在哪里???我看不出来。房间和创造者之间没有关系。它的场馆thas有一个创建者,通过rooms=models.ManyToManyField(房间)在场馆中连接房间和场馆。如果我可以访问场馆中的creator,那么我可以访问其余的数据。在表单的构造函数中,在第1行之后,使用writed:user=kwargs.pop('user',None)。我在这行后面添加了:print(user),它不打印任何内容。我假设这个用户指的是经过身份验证的用户。
class Room(models.Model):
    name = models.CharField(max_length=100)

class Venue(models.Model):
    creator = models.ForeignKey(User)
    name = models.CharField(max_length=100)
    rooms = models.ManyToManyField(Room, through="VenueRooms")

class VenueRooms(models.Model):
    venue = models.ForeignKey(Venue)
    room = models.ForeignKey(Room)

class Meeting(models.Model):
    name = models.CharField(max_length=100)
    venue = models.ForeignKey(Venue)
    room = models.ForeignKey(Room)

class MeetingForm(ModelForm):
    class Meta:
        model = Meeting
        fields = ('name', 'venue', 'room',)

    def __init__(self, *args, **kwargs):
        user = kwargs.pop('user', None)
        print(user) # it prints None
        super(MeetingForm, self).__init__(*args, **kwargs)