新的 ManyToManyField object 未添加
New ManyToManyField object is not adding
我正在构建一个 BlogApp,并且我在 ManyToManyField
中制作了 Favorite Users
的一个功能。
这意味着user_1
可以在一个字段中添加多个收藏用户。我建立一个视图来添加用户。
但是当我创建一个实例来存储来自管理员的 favorite users
,然后再从站点添加 favorite users
,然后如果我从站点添加最喜欢的用户,那么他们正在添加。但是,如果管理员中还没有 request.user
的 FavouriteUsers 实例,那么它不会添加和创建新的 object.
因此,用于存储 favorite users
of request.user
的新 object 没有添加,如果 object 已经存在,那么他们正在添加。
models.py
class FavoriteUsers(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE)
favorite_users = models.ManyToManyField(User, related_name='favorite_users', blank=True)
views.py
def AddFavUsers(request,user_id):
obj = FavoriteUsers.objects.filter(user=request.user)
user = get_object_or_404(User,id=user_id)
for ob in obj:
ob.favorite_users.add(user)
ob.user.add(request.user)
ob.save()
return redirect('home')
Image of already created object
当 object 已经手动创建时,favorite users
正在添加,但如果不是,则新的 object 不会创建。
如有任何帮助,我们将不胜感激。
提前致谢。
您的视图基本上是将 user
添加到链接到 User
的所有 FavoriteUser
。但是完全没有说有这样的FavoriteUser
。
因此我们可以构造一个 FavroiteObject
具有:
def AddFavUsers(request,user_id):
obj = FavoriteUsers.objects.<strong>create(</strong>
user=request.user
<strong>)</strong>
obj.favorite_users.add(user_id)
# …
建模也有点奇数,因为我们这里创建了第三个table,所以构建一个模型Favorite
有两个更有意义ForeignKey
s,因此充当连接点 table。所以这应该是这样的:
from django.conf import settings
class Favorite(models.Model):
user_to = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name='favorites_from'
)
user_from = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name='favorites_to'
)
class Meta:
constraints = [
models.UniqueConstraint(fields=['user_from', 'user_to'], name='favorite_only_once')
]
如果您想要 user_id
成为登录用户的最爱,您可以使用:
from django.contrib.auth.decorators import login_required
@login_required
def AddFavUsers(request, user_id):
Favorite.objects.<strong>create(user_from=request.user, user_to_id=user_id)</strong>
# …
然后您可以通过以下方式获取用户的收藏用户:
User.objects.filter(favorites_from__user_from=<em>my_user</em>)
其中my_user
是您要获取收藏用户的用户。
Note: You can limit views to a view to authenticated users with the
@login_required
decorator [Django-doc].
ManyToMany field already handles this. You can add a favorite_users property to your User model, which will point to the User model and Django will create the connecting table. Beware of the symmetrical参数,如果你省略它,它将是一个双向关系。
class MyUser(models.Model):
...
favorite_users = models.ManyToManyField("MyUser", symmetrical=False, blank=True)
如果您还想自己编写连接模型,请查看through参数。
我正在构建一个 BlogApp,并且我在 ManyToManyField
中制作了 Favorite Users
的一个功能。
这意味着user_1
可以在一个字段中添加多个收藏用户。我建立一个视图来添加用户。
但是当我创建一个实例来存储来自管理员的 favorite users
,然后再从站点添加 favorite users
,然后如果我从站点添加最喜欢的用户,那么他们正在添加。但是,如果管理员中还没有 request.user
的 FavouriteUsers 实例,那么它不会添加和创建新的 object.
因此,用于存储 favorite users
of request.user
的新 object 没有添加,如果 object 已经存在,那么他们正在添加。
models.py
class FavoriteUsers(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE)
favorite_users = models.ManyToManyField(User, related_name='favorite_users', blank=True)
views.py
def AddFavUsers(request,user_id):
obj = FavoriteUsers.objects.filter(user=request.user)
user = get_object_or_404(User,id=user_id)
for ob in obj:
ob.favorite_users.add(user)
ob.user.add(request.user)
ob.save()
return redirect('home')
Image of already created object
当 object 已经手动创建时,favorite users
正在添加,但如果不是,则新的 object 不会创建。
如有任何帮助,我们将不胜感激。
提前致谢。
您的视图基本上是将 user
添加到链接到 User
的所有 FavoriteUser
。但是完全没有说有这样的FavoriteUser
。
因此我们可以构造一个 FavroiteObject
具有:
def AddFavUsers(request,user_id):
obj = FavoriteUsers.objects.<strong>create(</strong>
user=request.user
<strong>)</strong>
obj.favorite_users.add(user_id)
# …
建模也有点奇数,因为我们这里创建了第三个table,所以构建一个模型Favorite
有两个更有意义ForeignKey
s,因此充当连接点 table。所以这应该是这样的:
from django.conf import settings
class Favorite(models.Model):
user_to = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name='favorites_from'
)
user_from = models.ForeignKey(
settings.AUTH_USER_MODEL,
related_name='favorites_to'
)
class Meta:
constraints = [
models.UniqueConstraint(fields=['user_from', 'user_to'], name='favorite_only_once')
]
如果您想要 user_id
成为登录用户的最爱,您可以使用:
from django.contrib.auth.decorators import login_required
@login_required
def AddFavUsers(request, user_id):
Favorite.objects.<strong>create(user_from=request.user, user_to_id=user_id)</strong>
# …
然后您可以通过以下方式获取用户的收藏用户:
User.objects.filter(favorites_from__user_from=<em>my_user</em>)
其中my_user
是您要获取收藏用户的用户。
Note: You can limit views to a view to authenticated users with the
@login_required
decorator [Django-doc].
ManyToMany field already handles this. You can add a favorite_users property to your User model, which will point to the User model and Django will create the connecting table. Beware of the symmetrical参数,如果你省略它,它将是一个双向关系。
class MyUser(models.Model):
...
favorite_users = models.ManyToManyField("MyUser", symmetrical=False, blank=True)
如果您还想自己编写连接模型,请查看through参数。