python – 使用通过Django ManyToManyField排序
作者:互联网
以下是我的模型设置的片段:
class Profile(models.Model):
name = models.CharField(max_length=32)
accout = models.ManyToManyField(
'project.Account',
through='project.ProfileAccount'
)
def __unicode__(self)
return self.name
class Accounts(models.Model):
name = models.CharField(max_length=32)
type = models.CharField(max_length=32)
class Meta:
ordering = ('name',)
def __unicode__(self)
return self.name
class ProfileAccounts(models.Model):
profile = models.ForeignKey('project.Profile')
account = models.ForeignKey('project.Accounts')
number = models.PositiveIntegerField()
class Meta:
ordering = ('number',)
然后,当我访问帐户时,如何在中间ProfileAccounts模型中按“数字”排序,而不是在帐户模型中使用默认的“名称”?
for acct_number in self.profile.accounts.all():
pass
这不起作用,但是我希望它如何访问这些数据的要点:
for scanline_field in self.scanline_profile.fields.all().order_by('number'):
pass
解决方法:
我刚刚经历过这个.
class Profile(models.Model):
accounts = models.ManyToManyField('project.Account',
through='project.ProfileAccount')
def get_accounts(self):
return self.accounts.order_by('link_to_profile')
class Account(models.Model):
name = models.CharField(max_length=32)
class ProfileAccount(models.Model):
profile = models.ForeignKey('project.Profile')
account = models.ForeignKey('project.Account', related_name='link_to_profile')
number = models.PositiveIntegerField()
class Meta:
ordering = ('number',)
我删除了除Article.name以外的非主题字段.
这是我找到的最短的解决方案,不知道是否可以在2010年使用,但现在肯定是.
标签:python,django,many-to-many 来源: https://codeday.me/bug/20190930/1835116.html