>

현재 사용자가 자신이 추천 한 모든 사람들을 볼 수 있도록 모델을 설계하고 싶습니다. 'stephen->jack', 'stephen->mike'와 같은 사용자 간의 모든 추천 관계를 추적하는 다른 모델을 만듭니다.

class CustomUser(AbstractBaseUser):
    // .......  a lot more fields
    referred_who = models.ForeignKey('referral', blank=True, null=True, on_delete = models.CASCADE)
class Referral(models.Model):
    referrer = models.ForeignKey(CustomUser, on_delete = models.CASCADE)
    referred = models.ForeignKey(CustomUser, on_delete = models.CASCADE,  related_name='referred')
    class Meta:
        unique_together = (("referrer", "referred"),)
    def __str__(self):
        return self.referrer.username + ' -> ' + self.referred.username

지금 당장 질문은 한 명의 사용자가 여러 사용자를 참조 할 수 있지만 모든 추천 관계를 추적하는 데 사용하는 'referred_who'필드는 그 중 하나만 유지할 수 있다는 것입니다. 백엔드 관리자에서는 다음과 같이 표시됩니다.

Referred who: stephen1 -> stephen2 (with a dropdown with all the relations but I can only choose one of them)

내가 원하는 것은 :

Referred who: stephen1 -> stephen2  stephen1 -> stephen3  stephen1 -> stephen4

이 'Referred_who'필드에 액세스하여 현재 사용자와의 모든 관계를 얻을 수 있습니다.

외래 키 필드 중 하나를 선택하는 대신 외래 키 필드에 추가하는 방법이 있습니까? 누군가 나에게 그 모범을 보여줄 수 있습니까? 많은 감사합니다.


  • 답변 # 1

    당신은 Referral 가 필요하지 않습니다  수업. 당신의 referred_who  필드는 CustomUser 를 가리킬 수 있습니다 . 나는 그것을 referred_by 로 이름을 바꿨다.   related_name='referees' 를 추가했습니다 . 이것은 사용자가 A 라면  추천 된 사용자 B  및 사용자 B  추천 된 사용자 C  그리고 D 그런 다음 B.referred_by == A  그리고 B.referees == (C, D) :

    class CustomUser(AbstractBaseUser):
        referred_by = models.ForeignKey('self', blank=True, null=True, on_delete = models.CASCADE, related_name='referees')
    
    

    그러면 관리자에게 표시 할 다음과 같은 맞춤 양식을 만들 수 있습니다.

    from django.contrib import admin
    from django import forms
    from django.db import models
    class CustomUserForm(forms.ModelForm):
        class Meta:
            model = CustomUser
            fields = '__all__'
        referees = forms.ModelMultipleChoiceField(queryset=CustomUser.objects.all())
        def __init__(self, *args, **kwargs):
            super(CustomUserForm, self).__init__(*args, **kwargs)
            if self.instance:
                self.fields['referees'].initial = self.instance.referees.all()
    class CustomUserAdmin(admin.ModelAdmin):
        form = CustomUserForm
    admin.site.register(CustomUser, CustomUserAdmin)
    
    

    참고 : 이렇게하면 선택한 사용자가 referees 에 저장되지 않습니다  필드는 아직 save 를 재정 의하여이를 수행해야합니다.  방법으로 양식을 작성했지만 이것이 시작되기를 바랍니다.

관련 자료

  • 이전 python - xlsx 파일에서 팬더 데이터 프레임 생성
  • 다음 youtube dl front end Video Download - youtube-dl 프론트 엔드 비디오 다운로드 - 파이썬과 플라스크를 사용합니까?