은 여분의 데이터가 저장되지 않도록주문이 모델을 통해
class Membership(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
group = models.ForeignKey(Group, on_delete=models.CASCADE)
order = models.PositiveIntegerField()
class Meta:
ordering = ('order',)
처럼 보이게하기 위해 Membership
모델을 변경, 장고의 example of using a "through" model은 다 대다 관계를 추가 데이터를 지정하는 고려와 다 대다을 장고 에 Person
의 순서를 지정하는 순서 매개 변수입니다.
는 name
발주 나머지 Person
인스턴스 (아닌 그룹) 다음 order
발주 그룹에 우선 Person
인스턴스를 포함하는 소정의 Group
위한 검색어 세트를 획득하고자 내.
나는이 검색어 세트가 예상되는 사람의 인스턴스를 포함하는 표시 할
# Get all beatles members ordered by the through model
qs1 = beatles.members.all().order_by('membership__order')
# Get the remaining Persons (those not in the beatles) ordered by name
qs2 = Person.objects.exclude(id__in=qs1).order_by('name')
처럼,이 개 검색어 세트와 함께이 작업을 수행 할 수 있습니다. 그러나 queryset 인스턴스를 필요로하는 양식 필드를 초기화하기 위해 먹이를주고 싶기 때문에 결합 된 queryset이 목록이나 일부 itertools "chain"개체가 아니라 필요합니다.
나는
result_qs = qs1 | qs2
을 시도했지만 나는 노조가 중복을 제거했는데 생각에도 불구하고 (
result_qs
중복을 포함 할 수 ?? 왜이 때때로 경우에도 Qs1으로 경우에 할 수 있는가?이와 중복 찾기 qs2는 겹치지 않습니다 !!).
내가
result_qs = (qs1 | qs2).distinct()
을 할 경우 작동하도록 보인다,하지만 난 내가 무엇을하고있어 항상 작동하는 것, 이것을 달성하는 좋은 방법입니다 경우 의심스러운입니다.
참고 : Person.objects.all().order_by('membership__order')
을 수행하면 Person 인스턴스가 구성원 인 각 Group
에 대해 Person
개의 인스턴스가 중복됩니다. 코멘트에서
모든 사람을위한 단지 검색과 동일하지 않습니다 위 그룹을 혼합? "비틀즈에 속한 사람들"과 "비틀즈에 속하지 않은 사람들"? – raratiru
@raratiru 무슨 뜻인지 예를 들어 주시겠습니까? 나는 첫 번째'qs1'의 순서가 문제라고 생각한다. – fpghost
그룹 "beatles"에있는 것들이 "order"필드에 의해 정렬되고 비틀즈에없는 것들은 기본적으로 정렬됩니다 (name/id). – fpghost