【发布时间】:2015-12-01 13:41:30
【问题描述】:
当我尝试使用 models.ManyToManyField 保存 ModelForm 时,它会引发错误“值不是主键的有效值”。 此外,我在 'def __init__' 中设置的初始值仅适用于管理面板,但不适用于前端。
我如何将它配置为仅在数据库中没有数据时才显示,但如果数据在其中将显示初始形式(编辑)?顺便说一句,字段附近没有小“+”,那么用户将如何添加值?
forms.py:
class UserprojectForm(forms.ModelForm):
class Meta:
model = Userproject
fields = ['name', 'user', 'description', 'vk_groups', 'source_name', 'date_updated', 'date_until'] #'date_created', cannot add django.core.exceptions.FieldError: Unknown field(s) (date_created) specified for Userproject
# widgets = {
# 'vk_groups': forms.Textarea(attrs={'cols': 80, 'rows': 10}),
# 'source_name': forms.Textarea(attrs={'cols': 80, 'rows': 5}),
# }
def __init__(self, *args, **kwargs):
super(UserprojectForm, self).__init__(*args, **kwargs)
#vk_groups = [(v.id,v.buid) for v in Userproject.objects.exclude(buid='').order_by('buid')]
vk_groups = (('https://vk.com/southitpark','https://vk.com/southitpark'), ('https://vk.com/graphgrail', 'https://vk.com/graphgrail'))
source_names = (('Вконтакте', 'Вконтакте'), ('Facebook', 'Facebook'), ('Twitter (скоро)', 'Twitter (скоро)'))
self.fields['vk_groups'].choices = vk_groups
self.fields['source_name'].choices = source_names
models.py:
class Userproject(models.Model):
class Meta:
verbose_name = u'Проект мониторинга'
verbose_name_plural = u'Проекты мониторинга'
vk_groups = models.ManyToManyField(Vkgroupstomonitor, null=True, blank=True, related_name="vkgroups", verbose_name=_("Группы Вконтакте"))
source_name = models.ManyToManyField(Sourcetomonitor, null=True, blank=True, related_name="sourcename", verbose_name=_("Название источника"))
name = models.CharField(u'Название проекта', unique=True, max_length=255)
.......
views.py:
class UserprojectCreate(CreateView):
model = Userproject
template_name = 'userproject_form.html'
success_url = reverse_lazy('userproject_list')
fields = ['name', 'description', 'vk_groups', 'source_name', 'date_updated']
def form_valid(self, form):
form.instance.user = self.request.user
return super(UserprojectCreate, self).form_valid(form)
【问题讨论】:
-
@Sayse 编辑代码进行清理
-
你一次问了太多问题。专注于您遇到的一个问题,以便其他人更容易帮助您。
标签: python django django-forms