在 Django ManyToMany 字段中过滤初始数据
Filterig initial data in Django ManyToMany field
我想过滤 Django ManyToMany 字段中的数据。
该应用程序创建的会议在位于某些场所的某些房间中举行。
多人可以创建会议,但一个人只能访问他创建的场地和房间。
我的模型是(示例):
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"创建的特定房间。 "User A" 看不到 "User B"
创建的房间
同理,我怎么能select只有在特定地点创建的房间而不是所有房间?
我不想使用 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
更改为表单名称
类似的东西。
@天使
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)
这是 MeetinfForm 的模型和 ModelForm,我试图在其中访问特定用户创建的房间和 venur 的查询集。
我想该用户是指经过身份验证的用户。就像 request.user;所以通过打印用户 un shell,我应该有经过身份验证的用户的名字。
我想过滤 Django ManyToMany 字段中的数据。
该应用程序创建的会议在位于某些场所的某些房间中举行。
多人可以创建会议,但一个人只能访问他创建的场地和房间。
我的模型是(示例):
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"创建的特定房间。 "User A" 看不到 "User B"
创建的房间同理,我怎么能select只有在特定地点创建的房间而不是所有房间? 我不想使用 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
更改为表单名称
类似的东西。
@天使
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)
这是 MeetinfForm 的模型和 ModelForm,我试图在其中访问特定用户创建的房间和 venur 的查询集。 我想该用户是指经过身份验证的用户。就像 request.user;所以通过打印用户 un shell,我应该有经过身份验证的用户的名字。