简体   繁体   English

插入多对多字段 Django

[英]Insert into many to many field Django

I'm trying to build Reddit in Django and for that, I am creating a board where users can discuss topics.我正在尝试在 Django 中构建 Reddit,为此,我正在创建一个用户可以讨论主题的论坛。 But I am not able to map user and board.但是我无法访问 map 用户和板。

Model: Model:

class Board(models.Model):
    id = models.AutoField(primary_key=True)
    unique_id = models.CharField(max_length=100, null=False, unique=True)
    created_by = models.ForeignKey(User_Detail, on_delete=models.CASCADE, related_name="board_creator")
    name = models.CharField(max_length=100, null=False, unique=
True)


class UserBoardMapping(models.Model):
    user = models.ManyToManyField(User_Detail)
    board = models.ManyToManyField(Board)
    user_type = models.CharField(max_length=10, choices=USER_TYPE, default='moderator')

My view:我的看法:

class CreateBoard(APIView):
    def post(self, request):
      data = JSONParser().parse(request)
      unique_id = data.get('board_id', None)
      created_by = data.get('created_by', None)
      name = data.get('name', None)

    if not created_by or not name:
        return Response({'ERROR': 'Please provide both username and password'},
                        status=status.HTTP_400_BAD_REQUEST)

    if Board.objects.filter(name=name).exists():
        return JsonResponse({'ERROR': "Board Already registered! "},
                            status=status.HTTP_409_CONFLICT)

    if not User_Detail.objects.filter(username=created_by).exists():
        return JsonResponse({'ERROR': "Username is not registered! "},
                            status=status.HTTP_404_NOT_FOUND)

    username = User_Detail.objects.get(username=created_by)
    board = Board(unique_id=unique_id, created_by=username, name=name)
    board.save()

    user_board_mapping = UserBoardMapping(user=username, board=board)
    user_board_mapping.save()

error:错误:

Direct assignment to the forward side of a many-to-many set is prohibited. Use user.set() instead.

UserBoardMapping is not working, how can I map user and board and Insert data in many to many field what am I doing wrong here in this code? UserBoardMapping 不工作,我怎么能 map 用户和板并在多对多字段中插入数据我在这段代码中做错了什么?

For your UserBoardMapping, user and board are M2M fields.对于您的 UserBoardMapping, userboard是 M2M 字段。 Because of that, you have to use .set() like in your error message.因此,您必须像在错误消息中那样使用.set() You can also use .add() if you want to add a value, like in your example.如果你想添加一个值,你也可以使用.add() ,就像你的例子一样。

user_board_mapping = UserBoardMapping.objects.create(user_type='whatyouwant')
user_board_mapping.user.add(username)
user_board_mapping.board.add(board)

You can find here some examples: https://docs.djangoproject.com/en/3.1/topics/db/examples/many_to_many/#many-to-many-relationships您可以在这里找到一些示例: https://docs.djangoproject.com/en/3.1/topics/db/examples/many_to_many/#many-to-many-relationships

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM