Трудности при создании сериализованного поля
Я новичок в Django и вообще в веб-разработке. Я пытаюсь сделать так, чтобы у каждого предмета одежды был тип одежды.Тип одежды - это Модель, потому что пользователи могут добавлять и удалять типы одежды по своему усмотрению. Но, как вы можете видеть в моем тесте, простое указание имени типа одежды не работает. Я пытался понять, как сериализовать поле.
У меня есть такой тест:
def test_add_clothingitems_ok(self):
token = self.get_token()
res = self.client.post('/api/clothing/',
data=json.dumps({
'id':1,
'name':"fav blue shirt",
'location':"bottom drawer",
'last_worn':"2022-08-15",
'clothingType': "shirt",
'image': 'blueshirt.jpeg',
}),
content_type='application/json',
HTTP_AUTHORIZATION=f'Bearer {token}')
self.assertEquals(res.status_code, 201)
result = json.loads(res.content)['data']
self.assertEquals(result['name'], 'fav blue shirt')
self.assertEquals(result['location'], 'bottom drawer')
self.assertEquals(result['clothingType'], 'shirt')
self.assertEquals(result['last_worn'], '2022-08-15')
self.assertEquals(result['image'], 'blueshirt.jpeg')
Это не удается, поскольку "shirt" не является типом одежды.
Мои модели:
class ClothingType(models.Model):
"""Mlodel representing a clothing type."""
name = models.CharField(max_length=30)
help_text = 'Enter the clothing type (e.g. Pants, Shirts)'
def __str__(self):
""" String for representing the the Model object."""
return self.name
class Meta:
ordering = ['-id']
class ClothingItem(models.Model):
"""Model representing a clothing item"""
name = models.CharField(max_length=50)
location = models.CharField(max_length=50,blank=True)
# ForeignKey used because a clothing item can only have one
# clothing type, but clothing types can have multiple clothing items
clothingType = models.ForeignKey(ClothingType, on_delete=models.CASCADE)
last_worn = models.DateField()
# ForeignKey used because a clothing item can only have one user, but
# a user can have multiple clothing items
user = models.ForeignKey(User, on_delete=models.CASCADE)
image = models.ImageField(upload_to="./static/images")
class Meta:
ordering = ['-id']
def __str__(self):
""" String for representing the the Model object."""
return self.name
Мои сериализаторы:
class ClothingItemSerializer(serializers.ModelSerializer):
# id = serializers.IntegerField(read_only=True)
# name = serializers.CharField()
# location = serializers.CharField()
# last_worn = serializers.DateField()
#user = serializers.CharField(read_only=True, source='user.username')
# image = serializers.ImageField()
#namelist = [i.name for i in ClothingType.objects.all()]
clothingType = serializers.CharField(source="clothingType", read_only=True)
class Meta:
model = ClothingItem
fields = ['id','name','location','last_worn','clothingType','image']
Я запутался в том, как передать значение типа одежды через JSON.
Здесь не получается:
try:
clothingitem.name = name
clothingitem.location = location
clothingitem.last_worn = last_worn
clothingitem.image = image
clothingitem.clothingType = clothingType
clothingitem.save()