2015-10-12 6 views
1

Я изучаю Django, следуя учебнику приложения, написанному другими людьми, называемым «портфолио». Код доступен по адресу http://www.lightbird.net/dbe/. Я попытался изменить код, поэтому, когда пользователь отправляет изображение, имя текущего пользователя может быть сохранено как «создатель», определенное в model.py как часть модели изображения. Мне сложно выполнить эту работу, так как я либо получил ошибку неожиданного аргумента «dpk», либо ошибку, связанную с количеством аргументов в функции «POST». Может кто-нибудь помочь? Вот информация, которую я имею. Я выделил часть добавленных кодов, которые не являются частью оригинала.Как добавить общий общий профиль пользователя?

models.py:

class Image(BaseModel): 
    title  = CharField(max_length=60, blank=True, null=True) 
    description = TextField(blank=True, null=True) 
    image  = ImageField(upload_to="images/") 
    thumbnail1 = ImageField(upload_to="images/", blank=True, null=True) 
    thumbnail2 = ImageField(upload_to="images/", blank=True, null=True) 

    width  = IntegerField(blank=True, null=True) 
    height  = IntegerField(blank=True, null=True) 
    hidden  = BooleanField(default=True) 
    group  = ForeignKey(Group, related_name="images", blank=True) 
    created  = DateTimeField(auto_now_add=True) 
    creator  = models.ForeignKey(User, null=True, blank=True) 
    ########################################################## 
    def save(self,**kwargs): 
     if kwargs.has_key('request') and self.creator is None: 
      self.creator= kwargs['request'].creator 
      super(Image, self).save(**kwargs) 

forms.py:

class AddImageForm(f.ModelForm): 
    class Meta: 
     model = Image 
     exclude = "width height hidden group thumbnail1 thumbnail2  
    creator".split() 
     attrs = dict(cols=70, rows=2) 
     widgets = dict(description=f.Textarea(attrs=attrs)) 
    ##################################################################### 
    def save(self, commit=True , *args, **kwargs): 
      m = super(AddImageForm, self).save(commit=False, *args, **kwargs) 
      if m.creator is None and kwargs.has_key('request'): 
       m.creator= kwargs['request'].creator 
       m.save() 

views.py:

class AddImages(DetailView, FormSetView): 
    """Add images to a group view.""" 
    detail_model  = Group 
    formset_model  = Image 
    formset_form_class = AddImageForm 
    template_name  = "add_images.html" 
    extra    = 1 
    ############################################################ 
    def post(self, request): 
     if form.is_valid(): 
      form.save(request=request) 
    ############################################################ 
    def process_form(self, form): 
     form.instance.update(group=self.get_detail_object()) 

    def get_success_url(self): 
     return self.detail_absolute_url() 

urls.py:

urlpatterns = patterns("portfolio.views", 
    (r"^group/(?P<dpk>\d+)/(?P<show>\S+)/" , GroupView.as_view(), {}, 
    "group"), 
    (r"^group/(?P<dpk>\d+)/"    , GroupView.as_view(), {}, 
    "group"), 
    (r"^add-images/(?P<dpk>\d+)/"   , AddImages.as_view(), {}, 
    "add_images"), 
    (r"^slideshow/(?P<dpk>\d+)/"   , SlideshowView.as_view(), {}, 
    "slideshow"), 
    (r"^image/(?P<mfpk>\d+)/"    , ImageView.as_view(), {}, 
    "image"), 
    (r"^image/"       , ImageView.as_view(), {}, 
    "image"), 
    (r""         , Main.as_view(), {}, 
    "portfolio"), 
) 

ответ

0

Вы переопределили метод post на ваш взгляд, чтобы принять запрос, но ваши URL-адреса передают ему параметр dpk.

В любом случае вы не должны переопределять post. Логика, которая у вас там, должна произойти в form_valid.

(Кроме того, вы должны задуматься о действительно ли вам нужна та же логика в трех местах. Я бы поставил все этот код в form_valid, а не переопределять экономить на форме или модели вообще.)

+0

Благодаря! Дан. Как вы предположили, я создал функцию formset_valid в views.py и передал request.user создателю в каждой отдельной форме в наборе форм. Он работает отлично. Я действительно мотивирован, чтобы больше узнать о джанго. – user5435785

Смежные вопросы