2014-01-28 24 views
0

我正在处理python/django应用程序。在我的应用程序中有两个表格商店和广告。这有很多关系。如何设置Django的多对多字段接受null

Class Store: 
    ads = models.ManyToManyField(Ad, null=True, blank=True) 

Class Store: 
    ads = models.ManyToManyField(Ad) 

我与上面给出的两个实现,但是当我救我的店不选择广告时,它给我的错误进行了测试:

广告:这是必须填写。

如何在此设置广告?

查看:

class StoreView(FormView): 
form_class = StoreForm 
success_url = "/" 
template_name = 'store.html' 

def __init__(self): 
    super(StoreView, self).__init__() 
    self.store = None 

def get_form_kwargs(self): 
    kwargs = super(StoreView, self).get_form_kwargs() 
    kwargs['current_user'] = self.request.user 
    if 'store_id' in self.kwargs: 
     self.store = Store.objects.get(id=self.kwargs['store_id']) 
     kwargs['instance'] = self.store 
    kwargs['request'] = self.request 
    return kwargs 

def get_context_data(self, **kwargs): 
    context = super(StoreView, self).get_context_data(**kwargs) 
    context['store_info'] = self.store 
    return context 

@method_decorator(login_required) 
def dispatch(self, *args, **kwargs): 
    return super(StoreView, self).dispatch(*args, **kwargs) 

def form_invalid(self, form): 
    return super(StoreView, self).form_invalid(form) 

def form_valid(self, form): 
    self.object = form.save() 
    return super(StoreView, self).form_valid(form) 

形式:

class StoreForm(forms.ModelForm): 
def __init__(self, *args, **kwargs): 
    self.fields['ads'] = forms.ModelMultipleChoiceField(
     queryset=Ad.objects.filter(type=13), 
     widget=forms.CheckboxSelectMultiple, 
     label='Ads associated with this store' 
    ) 

def save(self, commit=False): 
    store = super(StoreForm, self).save(commit=True) 
    return store 

class Meta: 
    model = Store 
+0

向我们显示您的表格,查看代码。 – Rohan

+0

@Rohan我已添加视图和代码太... –

+0

您可能要在表单中定义'ads'字段中添加'required = False'。 – Rohan

回答

1

中定义的表单中添加required=Falseads场。当您以模型形式覆盖字段时,不会从模型继承任何属性。你必须添加所有约束,如max_length,required等。

相关问题