使用中间表在django中订购M2M关系中的名称

时间:2016-07-29 19:54:55

标签: python django django-models django-views many-to-many

我有一个论文和作者的项目,同一作者可以在一些作者的不同顺序(位置)的论文中:

  

论文[003]标题:Django的ABC

     

作者:John Wilkins(作者1),Lisa Dude(作者2)

     

论文[123]标题:高级用户的Python。

     

作者:John Wilkins(作者1),George Mirage(作者2),Arthur Jones(作者3)

在我的作者模型中,每个作者只使用一个寄存器:

class Author(models.Model):
    nombre = models.CharField(max_length=40)
    primer_apellido = models.CharField(max_length=40)
    segundo_apellido = models.CharField(max_length=40,blank=True)
    correo = models.EmailField(blank=True)
    institucion = models.CharField(max_length=200) 

    class Meta:
        ordering = ["primer_apellido"]
        verbose_name_plural ="Autores"

    def __str__(self):
        return '%s %s %s' %(self.nombre, self.primer_apellido, self.segundo_apellido)

在Paper模型中,为每张纸准确使用一个寄存器:

class Paper(models.Model):
    Areas_Tematicas_Choices = (
        ('1', 'Currículo médico'),
        ('2', 'Educación en ciencias básicas'),
         )

    registro = models.CharField(max_length=4)
    titulo = models.CharField(max_length=250)
    area_tematica = models.CharField(max_length=2, choices=Areas_Tematicas_Choices)
    participantes = models.ManyToManyField(Author, through = 'Contribucion', through_fields= ('trabajo', 'autores'))

    class Meta:
        ordering = ["registro"]

    def __str__(self):
        return self.titulo

我需要一个中间模型来设置论文和作者之间的关系:

class Contribucion(models.Model):
    trabajo = models.ForeignKey(Paper)
    autores = models.ForeignKey(Author)
    orden = models.IntegerField()

    class Meta:
        unique_together = ("trabajo", "orden")
        ordering = ["trabajo", "orden"]
        verbose_name_plural = "TrabajoAutores"

    def __str__(self):
        return '%s %s %s' %(self.trabajo, self.autores, self.orden)

在项目的管理页面中,我在文本字段中手动输入作者的“顺序”,然后关系完成。

为了用模板显示数据,我提出了这个观点:

def mandadatos(request):
    trabajos = Paper.objects.all()
    autores = Author.objects.all()
    ordenautores = Contribucion.objects.all()
    return render(request, 'carga_contribucion.html', {'trabajos':trabajos, 'autores': autores, 'ordenautores':ordenautores})

最后在模板中:

{% for dato in trabajos.all %}
    <div class="row">
        <div class="col-md-1">[{{ dato.registro }}]</div>
        <div class="col-md-7 ">{{ dato.titulo }}.</div>
        <div class="col-md-4"></div>
    </div>
    <div class="container">
        <div class="row ">
            <div class="col-md-1"></div>
            <div class="col-md-8">
                {% for integrantes in dato.participantes.all %}
                    {{ integrantes.nombre }} {{ integrantes.primer_apellido }} {{ integrantes.segundo_apellido }}{% if not forloop.last %},{% endif %}
                {% endfor %}
             </div>
            <div class="col-md-3"></div>
        </div>
    </div>
    {% endfor %}

我可以检索论文的注册号,论文题目,所有作者,但按字母顺序,不按作者的顺序:

  

论文[003]   标题:Django的ABC

     

作者:Lisa Dude(作者2),John Wilkins(作者1)

     

论文[123]   标题:高级用户的Python。

     

作者:Arthur Jones(作者3),George Mirage(作者2),John Wilkins(作者1)

如何根据模型Contribucion(中间)中的“orden”字段检索相同的作者组合?问题是模型还是视图?

提前致谢! 古斯塔沃。

0 个答案:

没有答案