2016-07-10 2 views
0

django에서이 inlineformset_factory를 만들었으며 필드 중 하나에 위젯을 추가했습니다. 하지만 "attrs"가 없다는 오류가 발생합니다. 그런 다음 "attrs"를 추가하면 "예기치 않은 키워드 인수 'attrs'가 표시됩니다.Inlineformset_factory 위젯 - 객체에 'attrs'속성이 없습니다.

여기에 inlineformset_factory가 있습니다.

UNIT_CHOICES = (('dl', 'dl'), ('l', 'l'), ('kg', 'kg'),) 

IngredientFormSet = inlineformset_factory(RecipeModel, Ingredient, can_delete=False, extra=MAX_INGREDIENTS, exclude=[], 
    widgets={'unit_type': forms.ChoiceField(attrs={}, label="Måleenhet", required=True, widget=forms.Select, choices=UNIT_CHOICES)}) 

여기에 제가 빠뜨린 것들이 있습니다.

forms.py :

class AddRecipeForm(ModelForm): 
    products = Product.objects.all() 
    recipes = RecipeModel.objects.all() 
    choices =() 
    iterate = 1 
    for product in products: 
     if not recipes.filter(title=product.name).exists(): 
      choices = ((product.name, product.name),) + choices 
      iterate += 1 
    title = forms.ChoiceField(label="Navn på produktet til oppskriften", required=True, widget=forms.Select, choices=choices) 

    class Meta: 
     model = RecipeModel 
     exclude = [] 


class IngredientForm(ModelForm): 
    title = forms.CharField(max_length=255, widget=TextInput(attrs={'id': 'ingredient_title', 
                    'class': 'ingredient_class'})) 

    class Meta: 
     model = Ingredient 
     exclude = ['recipe'] 

views.py

def add_recipe(request): 
    if request.POST: 
     form = AddRecipeForm(request.POST) 
     if form.is_valid(): 
      recipe = form.save(commit=False) 
      ingredient_formset = IngredientFormSet(request.POST, instance=recipe) 
      if ingredient_formset.is_valid(): 
       recipe.save() 
       ingredient_formset.save() 
       return redirect('admin_site') 
      else: 
       return redirect('admin_site') 
     else: 
      return redirect('admin_site') 
    else: 
     form = AddRecipeForm() 
     ingredient_formset = IngredientFormSet(instance=RecipeModel()) 
    return render(request, 'admin/add_recipe.html', { 
     'form': form, 
     'ingredient_formset': ingredient_formset, 
    }, context_instance=RequestContext(request)) 

models.py 당신이 위젯을 지정하고 있기 때문에, 당신은 필드를 지정할 필요가 없습니다

class RecipeModel(models.Model): 
    title = models.CharField("Navn på produktet", max_length=255, default="") 
    kilogram_bottle = models.FloatField("Kg råvare for et produkt", blank=True) 
    deciliter_bottle = models.FloatField("Deciliter råvare for et produkt", blank=True) 
    description = models.TextField("Oppskrifts detaljer", default="") 


class Ingredient(models.Model): 
    recipe = models.ForeignKey(RecipeModel, on_delete=models.CASCADE) 
    ingredient_title = models.CharField("Navn på ingrediens", max_length=255, default="") 
    unit_before = models.FloatField("Råvare", blank=True, null=True) 
    unit_after = models.FloatField("Ferdig behandlet råvare", blank=True, null=True) 
    unit_type = models.CharField("Måleenhet", max_length=255) 

답변

0

다시 입력하십시오.

widgets={ 
    'unit_type': forms.Select 
} 

그러나 필드로 좀 더 노력하고있는 것처럼 보이므로 모델 폼을 만들고이를 인수로 전달할 수 있습니다.

You can read more on this topic here

class RecipeForm(forms.ModelForm): 
    ... 
    forms.ChoiceField(label="Måleenhet", required=True, widget=forms.Select(attrs={}), choices=UNIT_CHOICES) 

inlineformset_factory(RecipeModel, Ingredient, form=RecipeForm, can_delete=False, extra=MAX_INGREDIENTS) 

또한, attrs 위젯에 대한 속성이 아닌 양식 필드

+0

나는 형태에 관련된 다른 대부분의 코드를 추가됩니다. 나는 당신과 비슷하게 만들었지 만, "unit_type"이 외래 키 모델의 필드 인 것을 보았습니다. 나는 그것을 자신의 modelform에 넣었다. 그리고 나는 두 가지 형태의 견해를 연결하고 있습니다 (나는 그것이 내가 한 것이라고 생각합니다). –

관련 문제