Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建其名称在创建另一个对象时作为参数传递的相关对象_Python_Django_Django Rest Framework - Fatal编程技术网

Python 如何创建其名称在创建另一个对象时作为参数传递的相关对象

Python 如何创建其名称在创建另一个对象时作为参数传递的相关对象,python,django,django-rest-framework,Python,Django,Django Rest Framework,我想在保存一个与之相关的对象之前创建一个对象,我该怎么做 在我的项目模型中,我有标记ManyToManyField。我想创建或更新将标记名作为参数传递的项,即使尚未创建具有此名称的标记对象 型号.py class Tag(models.Model): name = models.CharField(primary_key=True, max_length=50, unique=True, db_index=True) items_num = models.BigIntegerFi

我想在保存一个与之相关的对象之前创建一个对象,我该怎么做

在我的项目模型中,我有标记ManyToManyField。我想创建或更新将标记名作为参数传递的项,即使尚未创建具有此名称的标记对象

型号.py

class Tag(models.Model):
    name = models.CharField(primary_key=True, max_length=50, unique=True, db_index=True)
    items_num = models.BigIntegerField('Number of Items', default=0)


class Item(models.Model):
    category = models.ForeignKey('Category', on_delete=models.DO_NOTHING)
    tags = models.ManyToManyField('Tag')
    user = models.ForeignKey('users.User', on_delete=models.CASCADE)
    name = models.CharField(max_length=30)
    description = models.CharField(max_length=300, blank=True)
    main_image = models.ImageField(default='main_image_test_path')

    CHEAP = 'CH'
    MIDDLE = 'MI'
    EXPENSIVE = 'EX'
    VERY_EXPENSIVE = 'VE'
    MOST_EXPENSIVE = 'ME'
    PRICE_CHOICES = [
        (CHEAP, 'Cheap'),
        (MIDDLE, 'Middle'),
        (EXPENSIVE, 'Expensive'),
        (VERY_EXPENSIVE, 'Very Expensive'),
        (MOST_EXPENSIVE, 'Most Expensive')
    ]
    price = models.CharField(
        max_length=2,
        choices=PRICE_CHOICES,
        default=CHEAP
    )

    status = models.BooleanField(default=1)  # 1 - Active, 0 - Inactive
class ItemListSerializer(serializers.ModelSerializer):
    tags = serializers.PrimaryKeyRelatedField(many=True, queryset=Tag.objects.all())
    category = serializers.SlugRelatedField(slug_field='name', 
                                            queryset=Category.objects.all(),)
    user = UserSerializer(read_only=True,)

    class Meta:
        model = Item
        fields = ('id', 'name', 'category', 'tags', 'user', 'price', 'status',)

        def validate_tags(self, value):
            print(value)
            if len(list(set(value))) != len(value):
                raise serializers.ValidationError('All tags must be unique')
            return value

        def create(self, validated_data):
            validated_data['user'] = self.context['request'].user
            for tag in validated_data['tags']:
                tag.items_num += 1
                tag.save()
            validated_data['category'].items_num += 1
            validated_data['category'].save()
            item = super(ItemListSerializer, self).create(validated_data)
            return item

class TagSerializer(serializers.ModelSerializer):

    class Meta:
        model = Tag
        fields = ('name', 'items_num',)
class ItemList(mixins.ListModelMixin,
               mixins.CreateModelMixin,
               generics.GenericAPIView):
    queryset = Item.objects.all()
    permission_classes = [permissions.IsAuthenticated]
    serializer_class = ItemListSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

class ItemList(mixins.ListModelMixin,
           mixins.CreateModelMixin,
           generics.GenericAPIView):
    queryset = Item.objects.all()
    permission_classes = [permissions.IsAuthenticated]
    serializer_class = ItemListSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)
序列化程序.py

class Tag(models.Model):
    name = models.CharField(primary_key=True, max_length=50, unique=True, db_index=True)
    items_num = models.BigIntegerField('Number of Items', default=0)


class Item(models.Model):
    category = models.ForeignKey('Category', on_delete=models.DO_NOTHING)
    tags = models.ManyToManyField('Tag')
    user = models.ForeignKey('users.User', on_delete=models.CASCADE)
    name = models.CharField(max_length=30)
    description = models.CharField(max_length=300, blank=True)
    main_image = models.ImageField(default='main_image_test_path')

    CHEAP = 'CH'
    MIDDLE = 'MI'
    EXPENSIVE = 'EX'
    VERY_EXPENSIVE = 'VE'
    MOST_EXPENSIVE = 'ME'
    PRICE_CHOICES = [
        (CHEAP, 'Cheap'),
        (MIDDLE, 'Middle'),
        (EXPENSIVE, 'Expensive'),
        (VERY_EXPENSIVE, 'Very Expensive'),
        (MOST_EXPENSIVE, 'Most Expensive')
    ]
    price = models.CharField(
        max_length=2,
        choices=PRICE_CHOICES,
        default=CHEAP
    )

    status = models.BooleanField(default=1)  # 1 - Active, 0 - Inactive
class ItemListSerializer(serializers.ModelSerializer):
    tags = serializers.PrimaryKeyRelatedField(many=True, queryset=Tag.objects.all())
    category = serializers.SlugRelatedField(slug_field='name', 
                                            queryset=Category.objects.all(),)
    user = UserSerializer(read_only=True,)

    class Meta:
        model = Item
        fields = ('id', 'name', 'category', 'tags', 'user', 'price', 'status',)

        def validate_tags(self, value):
            print(value)
            if len(list(set(value))) != len(value):
                raise serializers.ValidationError('All tags must be unique')
            return value

        def create(self, validated_data):
            validated_data['user'] = self.context['request'].user
            for tag in validated_data['tags']:
                tag.items_num += 1
                tag.save()
            validated_data['category'].items_num += 1
            validated_data['category'].save()
            item = super(ItemListSerializer, self).create(validated_data)
            return item

class TagSerializer(serializers.ModelSerializer):

    class Meta:
        model = Tag
        fields = ('name', 'items_num',)
class ItemList(mixins.ListModelMixin,
               mixins.CreateModelMixin,
               generics.GenericAPIView):
    queryset = Item.objects.all()
    permission_classes = [permissions.IsAuthenticated]
    serializer_class = ItemListSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

class ItemList(mixins.ListModelMixin,
           mixins.CreateModelMixin,
           generics.GenericAPIView):
    queryset = Item.objects.all()
    permission_classes = [permissions.IsAuthenticated]
    serializer_class = ItemListSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)
视图.py

class Tag(models.Model):
    name = models.CharField(primary_key=True, max_length=50, unique=True, db_index=True)
    items_num = models.BigIntegerField('Number of Items', default=0)


class Item(models.Model):
    category = models.ForeignKey('Category', on_delete=models.DO_NOTHING)
    tags = models.ManyToManyField('Tag')
    user = models.ForeignKey('users.User', on_delete=models.CASCADE)
    name = models.CharField(max_length=30)
    description = models.CharField(max_length=300, blank=True)
    main_image = models.ImageField(default='main_image_test_path')

    CHEAP = 'CH'
    MIDDLE = 'MI'
    EXPENSIVE = 'EX'
    VERY_EXPENSIVE = 'VE'
    MOST_EXPENSIVE = 'ME'
    PRICE_CHOICES = [
        (CHEAP, 'Cheap'),
        (MIDDLE, 'Middle'),
        (EXPENSIVE, 'Expensive'),
        (VERY_EXPENSIVE, 'Very Expensive'),
        (MOST_EXPENSIVE, 'Most Expensive')
    ]
    price = models.CharField(
        max_length=2,
        choices=PRICE_CHOICES,
        default=CHEAP
    )

    status = models.BooleanField(default=1)  # 1 - Active, 0 - Inactive
class ItemListSerializer(serializers.ModelSerializer):
    tags = serializers.PrimaryKeyRelatedField(many=True, queryset=Tag.objects.all())
    category = serializers.SlugRelatedField(slug_field='name', 
                                            queryset=Category.objects.all(),)
    user = UserSerializer(read_only=True,)

    class Meta:
        model = Item
        fields = ('id', 'name', 'category', 'tags', 'user', 'price', 'status',)

        def validate_tags(self, value):
            print(value)
            if len(list(set(value))) != len(value):
                raise serializers.ValidationError('All tags must be unique')
            return value

        def create(self, validated_data):
            validated_data['user'] = self.context['request'].user
            for tag in validated_data['tags']:
                tag.items_num += 1
                tag.save()
            validated_data['category'].items_num += 1
            validated_data['category'].save()
            item = super(ItemListSerializer, self).create(validated_data)
            return item

class TagSerializer(serializers.ModelSerializer):

    class Meta:
        model = Tag
        fields = ('name', 'items_num',)
class ItemList(mixins.ListModelMixin,
               mixins.CreateModelMixin,
               generics.GenericAPIView):
    queryset = Item.objects.all()
    permission_classes = [permissions.IsAuthenticated]
    serializer_class = ItemListSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)

class ItemList(mixins.ListModelMixin,
           mixins.CreateModelMixin,
           generics.GenericAPIView):
    queryset = Item.objects.all()
    permission_classes = [permissions.IsAuthenticated]
    serializer_class = ItemListSerializer

    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

    def post(self, request, *args, **kwargs):
        return self.create(request, *args, **kwargs)
当我发出post请求时,会出现以下错误: “标签”:[ 无效pk“不存在标记名称”-对象不存在 ]