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