Отношения многие ко многим в Django. - PullRequest
0 голосов
/ 29 сентября 2018

У меня возникла проблема с пониманием документа django rest Framework о взаимоотношениях многих со многими и загрузке таких файлов, как изображения, здесь мой код.

models.py

class Team(models.Model):
    admin = models.ForeignKey(User, null=True, blank=True, related_name='admin', on_delete=models.CASCADE)
    name = models.CharField(blank=True, max_length=100)
    longitude = models.FloatField(blank=True, null=True, max_length=20)
    latitude = models.FloatField(blank=True, null=True, max_length=20)
    score = models.IntegerField(blank=True, null=True, default=0)
    country = models.ForeignKey(Country, blank=True, on_delete=models.DO_NOTHING)
    city = models.ForeignKey(City, blank=True, on_delete=models.DO_NOTHING)
    players = models.ManyToManyField(User, blank=True, related_name='players')
    created = models.DateField(auto_now_add=True)


class TeamImage(models.Model):
    Team = models.ForeignKey(to=Team, null=True, blank=True, on_delete=models.CASCADE)
    img = models.ImageField(upload_to='team_img/', null=True, blank=True)

serializer.py

class TeamCreateSerializer(ModelSerializer):
    # admin = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(),
    # many=False, default=serializers.CurrentUserDefault())
    players = serializers.PrimaryKeyRelatedField(queryset=User.objects.all(), many=True)
    country = serializers.PrimaryKeyRelatedField(queryset=Country.objects.all())
    city = serializers.PrimaryKeyRelatedField(queryset=City.objects.all())
    score = serializers.IntegerField(read_only=True)
    images = TaskImageSerializer(source='teamimage_set', many=True, read_only=False)
# images = TaskImageSerializer(many=True, read_only=True)

class Meta:
    model = Team
    fields = [
        # 'admin',
        'name',
        'longitude',
        'latitude',
        'score',
        'country',
        'city',
        'players',
        'created',
        'images',
    ]

def create(self, validated_data):
    images_data = self.context.get('view').request.FILES
    team = Team.objects.create(name=validated_data.get('name', 'no-title'),
                               latitude=validated_data.get('latitude'),
                               longitude=validated_data.get('longitude'),
                               # score=validated_data.get('score'),
                               country=validated_data.get('country'),
                               city=validated_data.get('city'),
                               # players=validated_data.get('players'),
                               created=validated_data.get('created'),
                               # images=validated_data.get('images'),
                               )
    for image_data in images_data.values():
        TeamImage.objects.create(task=team, image=image_data)
    return team

view.py

class TeamAPIView(ListCreateAPIView):
    queryset = Team.objects.all()
    serializer_class = TeamCreateSerializer
    permission_classes = [AllowAny, AllowAnonymous]
    pagination_class = ProfileLimitPagination

    def perform_create(self, serializer):
        serializer.save(admin=self.request.user)

Я пытаюсь установить рекорды существующих игроков для команды Многие ко многим, а также добавить изображения в команду.Но последний код не работает нормально, я оставляю строки комментариев, потому что эти комментарии были для моих попыток.

последний API должен быть похож,

 {
        "name": "team1",
        "longitude": 12,
        "latitude": 12,
        "score": 0,
        "country": 2,
        "city": 1,
        "players": [],
        "created": "2018-09-26",
        "images": []
  }

, так в чем моя проблема и какчтобы решить ее, я прочитал django-rest-framework doc, но я не получил свою точку зрения, поэтому у любого органа есть решение, пожалуйста, помогите мне.

и, наконец, когда я хочу обновить любое значение, например, игроки или администратор, или загрузить новоеimage Что мне делать?

Извините за длинный пост, но я хочу, чтобы кто-нибудь прочитал его.

...