Tôi có hai mô hình trong Django liên kết với nhau bởi mối quan hệ ManyToMany như thế này:Bắt mục mục đầu tiên trong một mối quan hệ nhiều-nhiều trong Django
class Person(models.Model):
name = models.CharField(max_length=128)
class Group(models.Model):
name = models.CharField(max_length=128)
members = models.ManyToManyField(Person)
tôi cần để có được những nhân vật chính trong nhóm mà là người đầu tiên trong nhóm. Làm thế nào tôi có thể có được người đầu tiên?
Đây là cách tôi đang bổ sung thêm thành viên:
grp = Group.objects.create(name="Group 1")
grp.save()
prs = Person.objects.create(name="Tom")
grp.members.add(prs) #This is the main person of the group.
prs = Person.objects.create(name="Dick")
grp.members.add(prs)
prs = Person.objects.create(name="Harry")
grp.members.add(prs)
Tôi không nghĩ rằng tôi cần bất kỳ cột bổ sung như id của bảng group_members
là một chuỗi hoạt động đúng.
Nếu tôi cố gắng tìm nạp thành viên chính của nhóm thông qua Group.objects.get(id=1).members[0]
thì Django nói rằng người quản lý không thể lập chỉ mục được.
Nếu tôi thử điều này Group.objects.get(id=1).members.all().order_by('id')[0]
, tôi nhận được thành viên có id thấp nhất trong bảng Person
.
Tôi làm cách nào để giải quyết vấn đề này?
Cảm ơn
Bạn muốn xác định ai là người "đầu tiên" trong nhóm? ID? Theo thứ tự abc? – Brandon
Giá trị có 'id' thấp nhất trong bảng' group_members'. Các đối tượng không bao giờ bị xóa khỏi bảng này vì vậy thành viên chính sẽ luôn giống nhau cho một nhóm. –
Câu trả lời của Alex Gaynor là chính xác. Bạn sẽ cần phải thêm một trường bổ sung để sắp xếp theo nhóm, vì cột ID không được đảm bảo tuần tự cho nhóm. – Brandon