2014-01-28 30 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等。

相關問題