장고에서 개발중인 모델과 다소 복잡한 상황이 있습니다. 기본 아이디어는 사이트의 사용자가 사람들에게 상을 줄 수 있지만 사용자와 수상자 간의 관계를 추적하기를 원합니다. 사용자는 동일한 사람에게 여러 가지 상을 줄 수 있지만 그 사이에는 하나의 관계 만 있습니다.관리자가 장고에서 다 대다 관계의 인라인 편집
class Recipient(models.Model):
name = models.CharField(max_length=255)
senders = models.ManyToManyField(User, through='Relationship')
class Relationship(models.Model):
user = models.ForeignKey(User)
recipient = models.ForeignKey(Recipient)
relationship = models.CharField(max_length=255, blank=True, default='')
class Meta:
unique_together = (('user', 'recipient'),)
class Award(models.Model):
recipient = models.ForeignKey(Recipient)
user = models.ForeignKey(User)
relationship = models.ForeignKey(Relationship)
award_name = models.CharField(max_length=255)
내가 오류를 얻을 관리자에 상을 추가하려고하면 내가
class RelationshipInline(admin.StackedInline):
model = Relationship
class AwardAdmin(admin.ModelAdmin):
inlines = [RelationshipInline]
exclude = ['relationship']
admin.site.register(Recipient)
admin.site.register(Award, AwardAdmin)
같은 것을 가지고있는 관리자에서 다음 모델은 (사용자가 표준 AUTH_USER 모델입니다)이 같을 "< 클래스 '관계'>에는 < 클래스 'Award'>"에 대한 ForeignKey가 없습니다. 장고를 편집 할 때 Django는 어떤 관계가 인라인으로 편집되어야하는지 알지 못하지만 실제로는 동일한 사용자 /받는 사람 쌍을 가진 사람이라는 점이 분명합니다 (사람에게). Django는 다중 열 키를 지원하지 않기 때문에 관계에있는 사용자 /받는 사람이 키라는 것을 지정할 수 없습니다 (그래서 내가 할 수있는 것은 unique_together로 지정하는 것입니다). 마찬가지로, Award의 사용자/수신자가 관계에 대한 다중 열 외래 키라는 것을 지정할 수 없습니다.
내가 여기에 도착하려고하는 방법이 있습니까? 보너스에서 다 대일 관계가있을 때 관리자에서 관계를 개별적으로 편집해야하는 것은 큰 불편입니다. 모델을 구성하는 더 좋은 방법이 있습니까?
고마워요. 수신자는 등록 된 사이트 사용자 일 필요가 없으므로 해당 모델을 제거하는 데는 효과가 없을 것입니다.하지만이를 개선하기 위해 save 메소드를 재정의 할 것입니다. – sagittarian