如何在 ManyToMany 字段中访问用户配置文件的朋友
How to access User Profile's friends in ManyToMany field
我正在构建一个简单的社交媒体应用程序。我正在尝试使用 ManyToManyField
.
构建将用户添加到 post
的功能
我正在尝试访问 Post's model instance "add_user"
中的 profile friends
以标记用户。
models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,default='',unique=True)
full_name = models.CharField(max_length=100,default='')
friends = models.ManyToManyField("Profile",blank=True)
class Post(models.Model):
post_owner = models.ForeignKey(User,default='',null=True,on_delete = models.CASCADE)
post_title = models.CharField(max_length=500,default='')
add_user = models.ManyToManyField(User.profile.friends.all())
我是 django 的新手,我不知道如何在 Post 的模型实例中访问 user's friend
。
如有任何帮助,我们将不胜感激。
提前致谢。
你做不到
add_users = models.ManyToManyField(User.profile.friends.all())`
因为模型被评估一次,并且需要是非可变值
您需要做的事情:
add_user = models.ManyToManyField("Profile",blank=True)
别忘了添加您的 ManyToManyField
:
related_name="XXX", null=True
您不能将查询集作为 ManyToManyField 的参数,只是一个 class 名称。
add_users = models.ManyToManyField(User.profile.friends.all()) # you can't do this.
add_users = models.ManyToManyField(User) # Do this.
您不应该将逻辑放在模型的定义中。
按照你的看法去做。
编辑:
我建议您使用 ModelChoiceField 并在那里执行过滤逻辑:
class AddFriendForm(forms.Form):
def __init__(self, *args, **kwargs):
try:
user = kwargs.pop('user')
except:
user = None
super(AddFriendForm, self).__init__(*args, **kwargs)
self.fields['friend'].queryset = user.profile.friends.all()
friend = forms.ModelChoiceField(queryset=User.objects.none())
然后在您看来,您可以这样初始化它:
def your_view(request):
form = AddFriendForm(user=request.user)
我正在构建一个简单的社交媒体应用程序。我正在尝试使用 ManyToManyField
.
post
的功能
我正在尝试访问 Post's model instance "add_user"
中的 profile friends
以标记用户。
models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE,default='',unique=True)
full_name = models.CharField(max_length=100,default='')
friends = models.ManyToManyField("Profile",blank=True)
class Post(models.Model):
post_owner = models.ForeignKey(User,default='',null=True,on_delete = models.CASCADE)
post_title = models.CharField(max_length=500,default='')
add_user = models.ManyToManyField(User.profile.friends.all())
我是 django 的新手,我不知道如何在 Post 的模型实例中访问 user's friend
。
如有任何帮助,我们将不胜感激。
提前致谢。
你做不到
add_users = models.ManyToManyField(User.profile.friends.all())`
因为模型被评估一次,并且需要是非可变值
您需要做的事情:
add_user = models.ManyToManyField("Profile",blank=True)
别忘了添加您的 ManyToManyField
:
related_name="XXX", null=True
您不能将查询集作为 ManyToManyField 的参数,只是一个 class 名称。
add_users = models.ManyToManyField(User.profile.friends.all()) # you can't do this.
add_users = models.ManyToManyField(User) # Do this.
您不应该将逻辑放在模型的定义中。 按照你的看法去做。
编辑: 我建议您使用 ModelChoiceField 并在那里执行过滤逻辑:
class AddFriendForm(forms.Form):
def __init__(self, *args, **kwargs):
try:
user = kwargs.pop('user')
except:
user = None
super(AddFriendForm, self).__init__(*args, **kwargs)
self.fields['friend'].queryset = user.profile.friends.all()
friend = forms.ModelChoiceField(queryset=User.objects.none())
然后在您看来,您可以这样初始化它:
def your_view(request):
form = AddFriendForm(user=request.user)