对不起,这就像这个问题的第1000个问题,但我仍然看不到隧道尽头的光。
假设我有两种模式:
class Video(models.Model):
title = models.CharField(u"Titel",max_length=200)
slug = AutoSlugField(populate_from='title',unique=True)
date = models.DateField("Datum")
description = models.TextField(u"Beschreibung")
user = models.OneToOneField(User, blank=True, null=True)
class Channel(models.Model):
name = models.CharField(u"Name",max_length=30)
slug = AutoSlugField(populate_from='name',unique=True)
videos = models.ManyToManyField('videoportal.Video',related_name="contained_videos",blank=True,null=True)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
如您所见,我想要一个包含视频的频道。因此,如果我使用像这样的ModelForm来播放视频
class VideoForm(ModelForm):
class Meta:
model = Video
我得到的表格不包含选择频道的输入字段(当然不包含)。那我该怎么做呢?如何在表单中输入一个输入字段来选择一个带有下拉菜单的频道?
谢谢, 菲利普
答案 0 :(得分:1)
如果视频只属于一个频道,只需将Video
模型ForeignKey
提供给Channel
模型。如果它应该属于多个频道,我会在ManyToManyField
模型中使用Video
,如已建议的那样。
我认为这符合上传视频并将其添加到频道的想法,远比用其他方式更好。
答案 1 :(得分:0)
使用自定义表单而不是Django ModelForm。
可能是这样的,
class VideoForm(forms.Form):
title = forms.CharField()
description = forms.TextField()
channel = forms.ModelChoiceField(queryset= Channel.objects.all(), empty_label=None)
在视图中进行验证。使用Model save()
方法保存POST表单中包含的信息。
答案 2 :(得分:0)
尝试将ManyToMany字段放在Video
模型中,并从Channel
模型中省略它:
class Video(model.Model):
...
channels = model.ManyToManyField('videoportal.Channel', related_name='videos')
...
如果您想要一个简单的下拉列表来选择单个频道,为什么它是视频和频道之间的多对多关系?