1

抱歉,这就像这个问题的第千个问题,但我仍然看不到隧道尽头的光。

假设我有两个模型:

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

我得到的表格将不包含选择频道的输入字段(当然不是)。那么我该怎么做呢?如何在我的表单中有一个输入字段来选择一个带有下拉菜单的频道?

谢谢,菲利普

4

3 回答 3

1

如果视频只属于一个频道,只需将您的Video模型提供ForeignKey给您的Channel模型。如果它应该属于多个频道,我会ManyToManyFieldVideo模型中使用 a,正如已经建议的那样。

我认为这符合上传视频并将其添加到频道的想法,这比反过来做要好得多。

于 2012-07-17T17:37:09.607 回答
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()方法来保存包含在您的 POSTed 表单中的信息。

于 2012-07-17T16:28:37.967 回答
0

尝试将 ManyToMany 字段放在Video模型中并从模型中省略它Channel


class Video(model.Model):
    ...
    channels = model.ManyToManyField('videoportal.Channel', related_name='videos')
    ...

如果你想要一个简单的下拉菜单来选择单个频道,为什么视频和频道之间是多对多的关系?

于 2012-07-17T16:48:42.457 回答