首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在尝试保存窗体中的ValueError值时,Django

在尝试保存窗体中的ValueError值时,Django
EN

Stack Overflow用户
提问于 2015-03-13 02:27:48
回答 1查看 414关注 0票数 0

在使用这种多到多的关系之前,我得到了“需要”字段" Dataset“值的错误。”在试图为视图中的ManyToMany字段赋值时。我在这里查看了许多相关问题,因此我必须首先保存Dataset对象。我认为我做的that...what出错了吗??我的数据库已经包含了四个主题项。“

models.py

代码语言:javascript
复制
class Subject(TimeStampedModel):
    subject_type = models.CharField(max_length=128, blank=False)

    def __unicode__(self):
        return self.subject_type

class Dataset(TimeStampedModel):
    dataset_id = models.CharField(max_length=256)    
    dataset_doi = models.CharField(max_length=15)       
    dataset_name = models.CharField(max_length=256, blank=False)
    dataset_description = models.TextField(blank=False)
    lab = models.CharField(max_length=256, blank=False)
    biological_sample = models.CharField(max_length=256, blank=False)
    subject_type = models.ManyToManyField('Subject', related_name='datasets', blank=True)
    date_collected = models.DateField(blank=True)  

    collection_facility = models.ManyToManyField('CollectionFacility', related_name='datasets', blank=True)
    processing_notes = models.TextField(blank=True)

    release_date = models.DateField()   
    release_asap = models.BooleanField()    
    pdb_code = models.CharField(max_length=256, blank=True)     
    publication_link = models.URLField(blank=True)      

    def create_name(self):
        self.dataset_name = "%s %s" % (self.biological_sample, self.lab)

    def save(self, *args, **kwargs):
        self.dataset_id = self.id

    def __unicode__(self):
        return "%s : %s" % (self.dataset_name, self.dataset_id)

forms.py RegistrationForm:

代码语言:javascript
复制
class RegistrationForm(forms.Form):

    subject_type = forms.ModelMultipleChoiceField(
        label="Subject",
        queryset = Subject.objects.all(),
        widget=forms.CheckboxSelectMultiple(),  
        required = True,
    )

views.py

代码语言:javascript
复制
def create_registration(form):
    dataset = Dataset()
    dataset.DOI = "preUpload"
    dataset.lab = form.cleaned_data['lab']
    dataset.biological_sample = form.cleaned_data['sample']
    dataset.resource_type = form.cleaned_data['dataset_type']
    dataset.dataset_description = form.cleaned_data['dataset_description']

    dataset.date_collected = form.cleaned_data['date_collected']
    dataset.release_date = form.cleaned_data['release_date']
    dataset.release_asap = form.cleaned_data['release_asap']

    if form.cleaned_data['pdb_code']:
        dataset.pdb_code = form.cleaned_data['pdb_code']

    if form.cleaned_data['publication_link']:
        dataset.publication_link = form.cleaned_data['publication_link']

    dataset.create_name()

    dataset.save()    # I don't think this save is working?

    subjects = form.cleaned_data['subject_type']
    dataset.subject_type = [x for x in subjects]

    for facility in form.cleaned_data['facility']
        dataset.collection_facility.add(facility)

    dataset.save()

    return dataset


def registration_submit(request):
    registration_form = RegistrationForm(request.POST)
    if registration_form.is_valid():
        registration = create_registration(registration_form)
.......
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-13 03:09:58

您忘记在overriden save()方法中调用原始Dataset.save()

代码语言:javascript
复制
def save(self, *args, **kwargs):
    self.dataset_id = self.id
    super(Dataset, self).save(*args, **kwargs)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29023908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档