Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.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 序列化Django对象_Python_Django_Django Views_Django Serializer - Fatal编程技术网

Python 序列化Django对象

Python 序列化Django对象,python,django,django-views,django-serializer,Python,Django,Django Views,Django Serializer,我正在尝试序列化一个对象,以便可以使用它来构建API。我要序列化的模型是我的概要文件模型。问题是当我转到url:\users时,输出是: ["[{\"model\": \"network.profile\", \"pk\": 2, \"fields\": {\"friends\": []}}, {\"model\": \"network.profile\&q

我正在尝试序列化一个对象,以便可以使用它来构建API。我要序列化的模型是我的概要文件模型。问题是当我转到url:\users时,输出是:

["[{\"model\": \"network.profile\", \"pk\": 2, \"fields\": {\"friends\": []}}, {\"model\": \"network.profile\", \"pk\": 3, \"fields\": {\"friends\": []}}, {\"model\": \"network.profile\", \"pk\": 4, \"fields\": {\"friends\": []}}]"]
我期待着这样的事情:

[{"user": "one", "friends":["foo", "bar", "baz"]}, {"user": "two", "friends":["one", "bar"]}]
型号.py

class User(AbstractUser):
    pass


class Profile(models.Model):
    user = models.OneToOneField("User", on_delete=models.CASCADE, primary_key=True)
    friends = models.ManyToManyField("User", related_name='following', blank=True, symmetrical=False)

    def serialize(self):
        return {
            "user": self.user,
            "friends": [user.username for user in self.friends.all()]
        }

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    try:
        instance.profile.save()
    except Profile.DoesNotExist:
        Profile.objects.create(user=instance)


class Post(models.Model):
    creator = models.ForeignKey("Profile", on_delete=models.CASCADE)
    content = models.TextField(max_length=250, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    likes = models.PositiveIntegerField(default=0)

    def serialize(self):
        return {
            "id": self.id,
            "creator": self.creator.user.username,
            "content": self.content,
            "created": self.created.strftime("%d %b %Y, %H:%M"),
            "likes": self.likes
        }
def allUsers(request):

    if request.method == "GET":
        profiles = serializers.serialize("json", Profile.objects.all())
    else:
        return JsonResponse({"error": "Error displaying all users"}, status=400)

    return JsonResponse([profiles], safe=False)

def allPosts(request):

    if request.method == "GET":
        posts = Post.objects.all()
    else:
        return JsonResponse({"error": "Error displaying all posts"}, status=400)

    posts = posts.order_by("created").all()
    return JsonResponse([post.serialize() for post in posts], safe=False)
    path("posts", views.allPosts, name="all_posts"),
    path("users", views.allUsers, name="all_users")
视图.py

class User(AbstractUser):
    pass


class Profile(models.Model):
    user = models.OneToOneField("User", on_delete=models.CASCADE, primary_key=True)
    friends = models.ManyToManyField("User", related_name='following', blank=True, symmetrical=False)

    def serialize(self):
        return {
            "user": self.user,
            "friends": [user.username for user in self.friends.all()]
        }

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    try:
        instance.profile.save()
    except Profile.DoesNotExist:
        Profile.objects.create(user=instance)


class Post(models.Model):
    creator = models.ForeignKey("Profile", on_delete=models.CASCADE)
    content = models.TextField(max_length=250, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    likes = models.PositiveIntegerField(default=0)

    def serialize(self):
        return {
            "id": self.id,
            "creator": self.creator.user.username,
            "content": self.content,
            "created": self.created.strftime("%d %b %Y, %H:%M"),
            "likes": self.likes
        }
def allUsers(request):

    if request.method == "GET":
        profiles = serializers.serialize("json", Profile.objects.all())
    else:
        return JsonResponse({"error": "Error displaying all users"}, status=400)

    return JsonResponse([profiles], safe=False)

def allPosts(request):

    if request.method == "GET":
        posts = Post.objects.all()
    else:
        return JsonResponse({"error": "Error displaying all posts"}, status=400)

    posts = posts.order_by("created").all()
    return JsonResponse([post.serialize() for post in posts], safe=False)
    path("posts", views.allPosts, name="all_posts"),
    path("users", views.allUsers, name="all_users")
url.py

class User(AbstractUser):
    pass


class Profile(models.Model):
    user = models.OneToOneField("User", on_delete=models.CASCADE, primary_key=True)
    friends = models.ManyToManyField("User", related_name='following', blank=True, symmetrical=False)

    def serialize(self):
        return {
            "user": self.user,
            "friends": [user.username for user in self.friends.all()]
        }

@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
    try:
        instance.profile.save()
    except Profile.DoesNotExist:
        Profile.objects.create(user=instance)


class Post(models.Model):
    creator = models.ForeignKey("Profile", on_delete=models.CASCADE)
    content = models.TextField(max_length=250, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    likes = models.PositiveIntegerField(default=0)

    def serialize(self):
        return {
            "id": self.id,
            "creator": self.creator.user.username,
            "content": self.content,
            "created": self.created.strftime("%d %b %Y, %H:%M"),
            "likes": self.likes
        }
def allUsers(request):

    if request.method == "GET":
        profiles = serializers.serialize("json", Profile.objects.all())
    else:
        return JsonResponse({"error": "Error displaying all users"}, status=400)

    return JsonResponse([profiles], safe=False)

def allPosts(request):

    if request.method == "GET":
        posts = Post.objects.all()
    else:
        return JsonResponse({"error": "Error displaying all posts"}, status=400)

    posts = posts.order_by("created").all()
    return JsonResponse([post.serialize() for post in posts], safe=False)
    path("posts", views.allPosts, name="all_posts"),
    path("users", views.allUsers, name="all_users")
现在我不想使用Django rest框架,因为我还在学习,我不认为在这一点上朝这个方向走会对我有帮助。我成功地序列化了我的Post模型,并一直将其用作获取API,因此我也将包括它,以便清楚地了解我试图遵循的格式