按插入的订单值订购多对多字段

问题描述

# models.py
from django.contrib.auth.models import User
# Create your models here.
class Profile(models.Model):
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    avatar = models.ImageField(upload_to=avatar_photo_upload,blank=True)
    banner = models.ImageField(upload_to=banner_photo_upload,blank=True)

    bio = models.TextField(max_length=150,blank=True)

    date_joined = models.DateField(auto_Now_add=True)
    time_joined = models.TimeField(auto_Now_add=True)

    def __str__(self) -> str:
        return self.user.username

class Friend(models.Model):
    # The friends,sender first,reciever second
    friends = models.ManyToManyField(Profile)

    # accepted or rejected
    accepted = models.BooleanField(default=False)
    rejected = models.BooleanField(default=False)

    date_added = models.DateField(auto_Now=True)
    time_added = models.TimeField(auto_Now=True)

    def __str__(self):
        if self.accepted == False and self.rejected == False:
            return f'{" sent a request to ".join([i.user.username for i in self.friends.all()])}'
        else:
            if self.accepted == True and self.rejected == True:
                return f'{" was a friend of ".join([i.user.username for i in self.friends.all()])}'
            elif self.accepted == True and self.rejected == False:
                return f'{" is a friend of ".join([i.user.username for i in self.friends.all()])}'
            else:
                return f'{" was rejected as a friend by ".join([i.user.username for i in self.friends.all()])}'

friends 字段是一个 many-to-many field, 通过示例了解我的问题:

例如 -> 创建 Profile 对象 a,然后创建 Profile 对象 b。 现在我在 b 字段中添加配置文件对象 friend,然后对象 a,但 friend 字段在 ab 中对它们进行排序。 ..

如何按添加时间排序。

谢谢。

编辑:

预期输出:与插入值的顺序相同。

解决方法

Django Many To Many Insert Ordering

Django 不保证保留多对多关系的顺序。如果您需要这样做,您应该使用带有显式“订单”字段的直通表。