1

我有两个模型:

class ProductCategory(models.Model):
    '''
    Product Category determines to which category the product falls into.
    '''

    category_name = models.CharField(max_length=254)


    def __unicode__(self):
        return u"%s" %(self.category_name)

    class Meta:
        verbose_name_plural = "Product Categories"



class Product(models.Model):
    '''
    Product Information
    '''
    name = models.CharField(max_length=250)
    category = models.ForeignKey(ProductCategory)



def __unicode__(self):
    return u"%s" %(self.product_name)

我想申请产品型号autocomplete的类别field。因此,

class ProductCategoryAutoComplete(autocomplete_light.AutocompleteModelBase):
    search_fields = ['category_name']
    model = Product
    choices = ProductCategory.objects.all()

autocomplete_light.register(Product, ProductCategoryAutoComplete)

我也包含了模板。一切正常。除了当我选择类别并提交时,表单html字段必填项会在底部弹出。怎么了?

编辑:表格

class ProductCreateForm(autocomplete_light.ModelForm):
    category = forms.ModelChoiceField(queryset=ProductCategory.objects, widget=autocomplete_light.ChoiceWidget('ProductCategoryAutoComplete'))
    class Meta:
        model = Product
4

2 回答 2

2

哎呀!

Product.category是模型的 FK Category,但您传递的自动完成 ( ProductCategoryAutoComplete) 已为Product模型注册!应该允许选择 a 的字段Category应该使用自动完成Category,而不是Product;)

更好地使用autocomplete_light.ModelForm

由于您使用的是autocomplete_light.ModelForm,因此您不必指定该字段。只需注册一个自动完成Category

autocomplete_light.register(Category, search_fields=['category_name'])

让我们autocomplete_light.ModelForm做字段定义:

class ProductCreateForm(autocomplete_light.ModelForm):
    class Meta:
        model = Product

是的,这就是所需要的;)

于 2014-05-20T19:11:30.190 回答
0

search_fields错了,产品没有字段 category_name,如果我理解你的想法,它必须是:

class ProductCategoryAutoComplete(autocomplete_light.AutocompleteModelBase):
    search_fields = ['category__category_name']
    model = Product
    choices = ProductCategory.objects.all()

autocomplete_light.register(Product, ProductCategoryAutoComplete)
于 2014-05-19T16:30:44.013 回答