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)
我有两个模型用户和视频。我想 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)