gpt4 book ai didi

django - Django关系

转载 作者:行者123 更新时间:2023-12-04 13:30:03 26 4
gpt4 key购买 nike

我是Django的新手,在遇到很多有关relatiosnhips和Manytoone(即外键)的问题时,我遇到了一些问题。

我的设置是这样。

我有A级,B级,C级

每个B类对象必须属于一个A类对象。它们不能属于多个A类对象。一个更实际的例子是,如果A类是一个音乐乐队,而B类是具有该乐队的歌曲。大多数乐队会拥有多首歌曲,但每首歌曲都必须属于一个乐队(在此示例中,一首歌曲永远不能有多个乐队)。

C类是乐队个人成员的列表。因此,每个乐队成员都可以与任意数量的歌曲以及任意数量的Bands相关联。换句话说,X波段的成员也可以是Y波段的成员。

我的问题是

在这种情况下,我将如何使用ForeignKey和ManytoMany关系?

设计该示例的目的只是为了使我的情况更容易理解,并帮助我解释我的问题。我希望管理员为每个C类对象显示B类对象或C类所属的A类对象。 B类和A类也是如此。

如果查看A类对象,则应该能够列出属于该特定A类对象的所有B类对象的列表。

任何和所有输入表示赞赏。

最佳答案

这是我的设置方法(在您的models.py中)

class Member(models.Model):
name = models.CharField(max_length=100)
...

def __unicode__(self):
return self.name


class Band(models.Model):
name = models.CharField(max_length=100)
members = models.ManyToManyField(Member)
...

def __unicode__(self):
return self.name


class Song(models.Model):
name = models.CharField(max_length=100)
band = models.ForeignKey(Band)
...

def __unicode__(self):
return self.name

设置如下:
  • member.band_set.all()给您成员
  • 所属的所有乐队
  • band.members.all()为您提供了
  • 乐队的成员
  • song.band为您提供该歌曲的乐队
  • band.song_set.all()为您提供
  • 乐队的所有歌曲

    请注意,成员上的 band_set和band上的 song_set是“反向”关系。在模型中没有明确定义它们,但是Django会透明地为您设置它们。您可以使用字段定义上的 related_name参数来自定义它们。例子:
    class Band(models.Model):
    members = models.ManyToManyField(Member,related_name='bands')

    让您获得成员(member)的所有乐队,如下所示:
    member.bands.all()

    管理员将自动提供以下内容:
  • 在多选列表中显示某个乐队的所有成员
  • 在单个选择列表中显示歌曲的乐队

  • 但是,如果您想查看乐队的歌曲,则必须进行一些管理员自定义。

    在您的 admin.py中:
    from django.contrib import admin

    class SongInline(admin.StackedInline):
    model = Song
    extra = 1

    class BandAdmin(admin.ModelAdmin):
    inlines = [SongInline]

    admin.site.register(Band,BandAdmin)
    admin.site.register(Member)
    admin.site.register(Song)

    这样一来,您就可以直接在管理页面上查看歌曲-并进行编辑或添加!通过遵循此模板,您还可以显示成员的所有乐队。

    您可以在 http://docs.djangoproject.com/en/dev/intro/tutorial02/上获得有关管理员自定义的更详细的介绍。

    关于django - Django关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1432625/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com