Django中模型的一对多关系

One to Many relationship of models in Django

我有两个模型用户和视频。我想 link 他们。我正在尝试建立关系 b/w 用户和他们观看的视频。假设用户 1 观看了视频 1、视频 2 和视频 3。我想在一个 table 中查看 user1 观看的所有视频记录。我定义了以下模型但对我不起作用...

class User(models.Model):
    user_id = models.IntegerField()
    user_name = models.CharField(max_length=40)
    email = models.EmailField()
    city = models.CharField(max_length=40)
    videoData = models.ForeignKey('VideoData', null = True)
    class Meta:
        ordering = ['user_id']
        verbose_name = 'User MetaData'
        verbose_name_plural = 'Users MetaData'
    def __unicode__(self):
        return str(self.user_id)

class VideoData(models.Model):
    video = models.CharField(max_length=40)
    time  = models.IntegerField()
    class Meta:
        verbose_name = 'User_Video MetaData'
        verbose_name_plural = 'Users_Video MetaData'
    def __unicode__(self):
        return str(self.video)

在这里,我可以 link 向用户 1 发送一个视频,但向用户 1 发送的视频不多。当我打开用户 table 时,我只看到一个视频 linked 但我想看到用户观看过的所有视频。我该怎么做?

这里需要使用ManyToMany关系。一个用户可以观看多个视频。并且一个视频可以被多个用户观看。

这是一个示例模型结构,您可以在其中存储更多关于用户观看的视频的元数据。

class User(models.Model):
    name = models.CharField(max_length=40)
    videos_watched = models.ManyToManyField('Video', through='WatchedVideo')


class Video(models.Model):
    name = models.CharField(max_length=40)
    time  = models.IntegerField()


class WatchedVideo(models.Model):
    user = models.ForeignKey(User)
    video = models.ForeignKey(Video)
    watched_on = models.DateTimeField(auto_now_add=True)

要在 UserAdmin 内嵌入 WatchedVideo,试试这个:

#admin.py inside your graph app
class WatchedVideoInline(admin.TabularInline):
    model = WatchedVideo

class UserAdmin(admin.ModelAdmin):
    inlines = [WatchedVideoInline]

admin.site.unregister(User)
admin.site.register(User, UserAdmin)