django - 在 Django 模型中按多对多关系排序

标签 django django-models many-to-many

我正在写一个小网站来存储我写的论文。关系论文<->作者很重要,但作者姓名的顺序(哪个是第一作者,哪个是第二作者,等等)也很重要。

我只是在学习 Django,所以我知道的不多。无论如何,到目前为止我已经完成了:

from django.db import models

class author(models.Model):
    Name = models.CharField(max_length=60)
    URLField = models.URLField(verify_exists=True, null=True, blank=True)

    def __unicode__(self):
        return self.Name

class topic(models.Model):        
    TopicName = models.CharField(max_length=60)
    def __unicode__(self):
        return self.TopicName

class publication(models.Model):
    Title           = models.CharField(max_length=100)
    Authors         = models.ManyToManyField(author, null=True, blank=True)
    Content         = models.TextField()
    Notes           = models.TextField(blank=True)
    Abstract        = models.TextField(blank=True)
    pub_date        = models.DateField('date published')
    TimeInsertion   = models.DateTimeField(auto_now=True)
    URLField        = models.URLField(verify_exists=True,null=True, blank=True)
    Topic           = models.ManyToManyField(topic, null=True, blank=True)

    def __unicode__(self):
        return self.Title

在我现在可以定义作者是谁的意义上,这项工作很好。但我不能订购它们。我该怎么做?

当然我可以添加一系列关系:第一作者,第二作者,...
但它会很丑,而且不灵活。有什么更好的主意吗?

谢谢

最佳答案

您可以添加 'through' model到那个 ManyToMany 关系并在该模型中,存储一个值,该值显示作者在与出版物的特定关联中应该出现的顺序。

(额外提示 - 它可能会帮助您深入了解 - 就清晰度而言 - 对类/模型名称使用首字母大写,并为属性和实例/对象使用小写字母 - 这样,如果您与他人共享代码,它”会更容易,因为它是一种常见的模式)

关于django - 在 Django 模型中按多对多关系排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893080/

相关文章:

python - 在 Django get_object_or_404 中选择特定字段

Django channel 运行三个工作人员,这正常吗?

python - Django admin - 如何在自定义管理表单中为多对多字段添加绿色加号

sql - 创建一个新的多对多表

Django 1.8 : Migrations not detected after deleting migrations folder

Django: 'Module' 对象没有属性 '__file__'

django - auto_now 字段未使用 filter() 进行更新

Django 1.8 : How can I ensure that of Two Fields in a Model, 至少一个或只有一个必须满足条件?

python - Django 教程第 1 部分 'Poll' 对象没有改变

symfony - 多对多,Doctrine的实体生成器和复数化