У меня проблема с тем, что мой API создает дубликаты данных, так как я просто передаю название ингредиента, а его ресторан не Pk и т. Д. Поэтому, чтобы предотвратить эту вещь, я установил ограничение
class Meta:
unique_together = ('restaurant' ,'name')
вмоя модельДо этого все было хорошо, просто создавались дубликаты. Теперь после добавления этого ограничения говорится: «Поле ресторана обязательно», и мой сериализатор недействителен.
Моя модель ингредиента выглядит следующим образом:
class Ingredient(models.Model):
restaurant = models.ForeignKey(Restaurant, on_delete=models.CASCADE )
name = models.CharField(max_length=255 ,)
class Meta:
unique_together = ('restaurant' ,'name')
def __str__(self):
return str(self.name)
и мой Serializer ингредиента похож на
class IngredientsSerializer(serializers.ModelSerializer):
restaurant = RestaurantSerializer(required=False)
class Meta:
model = Ingredient
fields = '__all__'
def create(self, validated_data):
restaurant = validated_data.get('restaurant')
name = validated_data.get('name', None)
ingredient = Ingredient.objects.create(restaurant=restaurant, name=name)
return ingredient
И мой view.py для сериализации похож на
@permission_classes([AllowAny])
class CreateIngredients(APIView):
def post(self, request):
serializer = IngredientsSerializer(data=request.data)
if serializer.is_valid():
restaurant=Restaurant.objects.get(id=request.POST['restaurant'])
obj_article = serializer.save(restaurant=restaurant)
return Response(success_response(data='none', msg='Ingredient added'), status=status.HTTP_200_OK)