1

我想通過request.user完成的餐館過濾。下面的文檔,但我不斷收到__init__()得到了一個意想不到的關鍵字參數user當我試圖篩選__init __()當我嘗試過濾時,得到了一個意外的關鍵字參數'user'

forms.py

from .models import Restaurant 
from .models import Item 
from django import forms 


class LocationCreate(forms.ModelForm): 

    class Meta: 
     model = Item 
     fields = [ 
      'restaurant' 
      'category', 
      'food_name' 
     ] 
    def __init__(self, user=None, *args, **kwargs): 
     super(ItemCreate, self).__init__(*args, **kwargs) 
     self.fields['restaurant'].queryset = Restaurant.objects.filter(owner=user) 

models.py

class Restaurant(models.Model): 
    restaurant_name = models.CharField(max_length=250) 
    restaurant_photo = models.ImageField(upload_to='roote_image') 
    category  = models.ManyToManyField(Category) 
    timestamp  = models.DateTimeField(auto_now_add=True, null=True) 
    updated  = models.DateTimeField(auto_now=True, null=True) 
    owner   = models.ForeignKey(User) 

    def get_absolute_url(self): 
     return reverse('post:detail', kwargs={'pk': self.pk}) 


class Item(models.Model): 
    restaurant= models.ForeignKey(Roote, on_delete=models.CASCADE, null=True) 
    food_name = models.CharField(max_length=1000) 
    category = models.CharField(max_length=250) 
    owner  = models.ForeignKey(User) 
    def __str__(self): 
     return self.food_name 

    def get_absolute_url(self): 
     return reverse('post:detail', kwargs={'pk': self.pk}) 

views.py

class ItemCreate(CreateView): 
    model = Item 
    fields = ['restaurant','category ', 'food_name '] 
    success_url = reverse_lazy('post:index') 


    def form_valid(self, form): 
     if form.is_valid(): 
      roote = restaurant.objects.filter(owner =self.request.user) 
      instance = form.save(commit=False) 
      instance.owner = self.request.user 
     return super(ItemCreate, self).form_valid(form) 

    def get_form_kwargs(self): 
     kwargs = super(ItemCreate, self).get_form_kwargs() 
     kwargs['user'] = self.request.user 
     return kwargs 

detail.html

{% block body %} 

    <div class="col-sm-6 col-sm-offset-3"> 
     <img src="{{ restaurant.restaurant_photo.url }}" style="width: 250px;" > 


     <h1>{{ restaurant.restaurant_name }}</h1> 

     {% for item in restaurant.item_set.all %} 
      {{ item.food_name }}: {{ item.category}} 
      <br> 

     {% endfor %} 

形式作品,未經過濾器,但它在餐廳的每個實例已在網站

完全錯誤所致帶來:

return form_class(**self.get_form_kwargs()) 
TypeError: __init__() got an unexpected keyword argument 'user' 
+0

請提供完整的堆棧跟蹤 –

+0

添加儘可能 – Migdotcom

回答

1

你忘了form_class屬性添加到您的視圖

class ItemCreate(CreateView): 
    model = Item 
    success_url = reverse_lazy('post:index') 
    form_class = LocationCreate # <- here 

    def form_valid(self, form): 
     if form.is_valid(): 
      roote = restaurant.objects.filter(owner =self.request.user) 
      instance = form.save(commit=False) 
      instance.owner = self.request.user 
     return super(ItemCreate, self).form_valid(form) 

    def get_form_kwargs(self): 
     kwargs = super(ItemCreate, self).get_form_kwargs() 
     kwargs['user'] = self.request.user 
     return kwargs 
+0

謝謝你的工作。就像一個側面說明我也有一個錯誤,說我需要在views.py中選擇字段或form_class。我選擇了form_class – Migdotcom

0

按照docs,這是該__init__方法的一個的ModelForm簽名:

def __init__(self, *args, **kwargs)

看看有沒有user?這是錯誤信息告訴你的。 如果你想獲得用戶,請通過self.request.user(或類似的東西,根據你使用的中間件而定)嘗試。

希望有幫助!

+0

所以要清楚帶走從最初的參數的用戶,並嘗試只使用過濾式自救器.request.user單獨? – Migdotcom

+0

是的,這應該是竅門 –

相關問題