【问题标题】:'title' is an invalid keyword argument for this function'title' 是此函数的无效关键字参数
【发布时间】:2018-07-31 21:25:58
【问题描述】:

更新模型和序列化程序后,我无法将新文章保存到数据库中。我不断收到 “'title' 是此函数的无效关键字参数。”

我正在开发 Postgres10、Python3.6、Django2.0 和 DRF 3.8.2。

我已经删除了我的数据库几次,但错误仍然存​​在。拜托我需要你的帮忙。提前致谢。

这是我的旧模型的副本

class Article(models.Model):
    title = models.CharField(max_length=200, blank=False)
    slug = models.SlugField(max_length=250, unique_for_date='created')
    body = models.TextField()
    image_url = models.URLField(max_length=255)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add = True) 
    published = models.DateTimeField(auto_now=True)
    updated = models.DateTimeField(auto_now=True)
    country = models.ForeignKey(Country, on_delete=models.CASCADE)
    categories = models.ManyToManyField(Category, default=1)
    # categories = ArrayField(models.IntegerField(), blank=False)
    entities = models.ManyToManyField(Entity, default=1)
    # entities = ArrayField(models.CharField(max_length=200), 
    blank=True)
    summary = models.TextField(blank=True)
    is_published = models.BooleanField(default=False)
    is_curated = models.BooleanField(default=False)

    class Meta:
        ordering = ('-created',)

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(Article, self).save(*args, **kwargs)

我的新(更新)模型:

class Article(models.Model):
    title = models.CharField(max_length=200, blank=False)
    slug = models.SlugField(max_length=250, unique_for_date='created')
    body = models.TextField()
    image_url = models.URLField(max_length=255)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add = True) 
    published = models.DateTimeField(auto_now=True)
    updated = models.DateTimeField(auto_now=True)
    country = models.ForeignKey(Country, on_delete=models.CASCADE, 
    related_name="posts")
    category = models.OneToOneField(Category, 
    on_delete=models.CASCADE, 
    default=1, related_name="posts")
    entities = models.ManyToManyField(Entity, default=1, 
    related_name="posts")
    summary = models.TextField()
    keypoint1 = models.CharField(max_length=500, blank=False, 
    null=False)
    keypoint2 = models.CharField(max_length=500, blank=False, 
    null=False)
    keypoint3 = models.CharField(max_length=500, blank=True,  
    null=True)
    keypoint4 = models.CharField(max_length=500, blank=True, 
    null=True)
    is_published = models.BooleanField(default=False)
    is_curated = models.BooleanField(default=False)

    class Meta:
        ordering = ('-created',)
    def __str__(self):
        return self.title


    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(Article, self).save(*args, **kwargs)

我的序列化器:

class CreateArticleSerializer(serializers.ModelSerializer):
    author = UserSerializer(read_only=True, required=False)
    country = CountrySerializer(read_only=True)

    class Meta:
        model = Article
        fields = ("id", "title", "body", "image_url", "country", 
        "keypoint1", "keypoint2", "keypoint3", "keypoint4", 
        "category", "entities", "author", "created", "updated", 
        "published", "is_published")
        read_only_fields = ("id", "created", "slug")

    def create(self, validated_data):

        entities_relations = validated_data.pop('entities', None)
        entity_instance = Entity.objects.create(**validated_data)
        entity_instance.posts = entities_relations
        article = Article.objects.create(entities=entity_instance, 
        **validated_data)


        return article

还有我的创建帖子视图:

class ArticleAPIView(generics.CreateAPIView):

    queryset = Article.objects.all()
    serializer_class = CreateArticleSerializer
    permission_classes = (IsAuthenticatedOrReadOnly,)

    #Create a new post
    def post(self, request, format=None):


        data_map = {
          'title': request.data.get('title'),
          'body': request.data.get('body'),
          'image_url': request.data.get('imageUrl'),
          'keypoint1': request.data.get('keyPoint1'),
          'keypoint2': request.data.get('keyPoint2'),
          'keypoint3': request.data.get('keyPoint3'),
          'keypoint4': request.data.get('keyPoint4'),
        }

        serializer = CreateArticleSerializer(data=data_map,context= 
        {'request': request})

        if serializer.is_valid():
            serializer.save(author=self.request.user)
            post_id = serializer.instance.id
            post = get_object_or_404(Article, pk=post_id)
            return Response((jsend.success({'post': 
                serializer.data})), status=status.HTTP_201_CREATED)

        else:
            return Response((jsend.fail(serializer.errors)), 
               status=status.HTTP_400_BAD_REQUEST)

【问题讨论】:

    标签: python django postgresql django-rest-framework


    【解决方案1】:

    在序列化程序的 create 方法中,您尝试使用 Article 的数据字段创建 Entity

        entities_relations = validated_data.pop('entities', None)
        entity_instance = Entity.objects.create(**validated_data)
    

    您没有指定错误发生的行,但它似乎在这里。我不知道Entity 模型的字段,但标题似乎不是其中之一。

    【讨论】:

    • 谢谢。对,就是那样。你救了我很多。
    【解决方案2】:

    你确定吗

    entity_instance = Entity.objects.create(**validated_data)
    

    ?? Entity 模型是否接受文章一的相同字段?

    【讨论】:

    • 不,不是。感谢您的回答。问题解决了。
    猜你喜欢
    • 2017-05-04
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 2012-07-07
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多