У меня возникла проблема с пониманием документа 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 Что мне делать?
Извините за длинный пост, но я хочу, чтобы кто-нибудь прочитал его.