过滤Django manytomy字段中的初始数据

2024-04-29 11:16:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我想过滤Django manytomy字段中的数据。在

该应用程序创建的会议在一些会议室举行,这些会议位于某些地点。在

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

我的模型是(示例):

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

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('venue:room_detail', kwargs={'pk':self.pk})

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

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse('venue:venue_detail', kwargs={'pk':self.pk})

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

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

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

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

非常感谢您的回复。在


Tags: nameselfmodelreturnmodelsdef会议length
2条回答

您可以从表单重写queryset

#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

差不多吧。在

@天使

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的查询集。 我假设用户是指经过授权的用户。就像是请求.用户;因此,通过在shell上打印user,我应该拥有经过身份验证的用户的名称。在

相关问题 更多 >