0

프로젝트에 다음과 같은 모델이 있습니다. 하나의 사이트에는 많은 지불 프로세서가 있고 하나의 지불 프로세서 (Paypal, Payza 등)는 여러 사이트에 속할 수 있습니다.장고에있는 템플릿에 ManyToManyField를 표시하십시오.

# Models.py 
class Sites(models.Model): 
    name = models.CharField(max_length=75) 
    link = models.CharField(max_length=150) 
    description = models.TextField(blank=True, null=True) 

    def __str__(self): 
     return self.name 

class PaymentProcessors(models.Model): 
    name = models.CharField(max_length=75) 

    def __str__(self): 
     return self.name 

class Sites_PaymentProcessors(models.Model): 
    site = models.ManyToMany(Sites) 
    payment_processor = models.ManyToMany(PaymentProcessors) 

보기 :

# View 
def home(request): 
site_list = Sites.objects.order_by('-date_launched') 
processors_list = PaymentProcessors.objects.all() 
return render_to_response('index.html', {'site_list': site_list, 
              'payment_processors_list': processors_list}, 
              RequestContext(request)) 

템플릿 내가 특정 사이트에 속하는 모든 지불 프로세서를 표시 할

# Template 
{% for site in site_list %} 
    {% for payment_processor in payment_processors_list.site.all %} 
      {{ payment_processor }} 
    {% endfor %} 
{% endfor %} 

. 필터를 사용하려고했지만 작동하지 않습니다. 내가 장고에 익숙하지 않은, 나는 설명서를 읽고 StackOverflow에 대한 답변을 볼려고했는데, 내가 제대로 작동하는지에 대해 잘 모르겠다.

답변

1

모델에 중간 테이블이 필요하지 않습니다. 장고는 뒤에서 당신을 위해 빌드합니다. 이 사이트 개체에서 지불 프로세서를 얻을 수 있기 때문에

#models.py 
class PaymentProcessor(models.Model): 
    name = models.CharField(max_length=75) 

    def __str__(self): 
     return self.name 

class Site(models.Model): 
    name = models.CharField(max_length=75) 
    link = models.CharField(max_length=150) 
    description = models.TextField(blank=True, null=True) 
    payment_processors = models.ManyToManyField(PaymentProcessor, null=True, blank=True) 

    def __str__(self): 
     return self.name 

는 다음보기에 당신은 단지의 site_list을 얻을 필요가 :

#views.py 
def home(request): 
    site_list = Site.objects.all() 
    return render(request, 'index.html', 
     {'site_list': site_list}) 

을 마지막으로 템플릿에 당신과 함께 ManyToMany 개체를 통해 루프 모든 기능, 그리고 거기에 나중에 그것을!

#index.html 
{% for site in site_list %} 
    {{ site }}: 
    {% for p in site.payment_processors.all %} 
     {{ p }} 
    {% endfor %} 
{% endfor %} 
관련 문제