我想了解一些有关从Django的modelAdmin中保存登录用户save_model()和save_formset()的一些信息。Django User Foreignkey,save_model和save_formset
考虑一下,我有一个模型,它接受用户通过http POST上传的照片。
在models.py:
class photo(models.Model):
title = models.CharField(max_length=50)
img = models.ImageField(upload_to='photocollection')
uploader = models.ForeignKey(User)
latitude = models.FloatField(null=True, blank=True)
longitude = models.FloatField(null=True, blank=True)
def save(self):
#Retain the model instance to do some processing before saving:
self.latitude = exif.getGPSLatitude(self.img)
self.longitude = exif.GPSLongitude(self.img)
return super(photoCollection, self).save()
class photoForm(ModelForm):
class Meta:
model = photo
然后在我的views.py:
def upload(request):
form = photoForm(request.POST, request.FILES)
if form_is_valid():
#do something useful
form.save()
在这里,我有一个有趣的场景。我的views.py中的表单无效,因为模型中的['uploader']字段永远不会更新,并且它是必填字段,因此不会保存。
1)如何获取要验证的表单?
另外,当保存表单时,我看到一篇文章here,它教导了如何在modelAdmin中使用save_model()保存ForeignKey(用户)。我已经试过这overiding中所示的链接,在我的admin.py创建photoAdmin类:
class photoAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
if not change:
obj.uploader = request.user
obj.save()
,但它仍然无法上传场request.user或request.user.username保存。我尝试了过度save_formset(),因为我在我的views.py中使用了photoForm。仍然无济于事。
2)什么时候save_model()和save_formset()实际被调用?
3)save_formset()和save_model()有什么区别?
4)当我在上面的views.py中调用form.save()时,会调用save_model()或save_formset()吗?
5)我的方法在验证views.py中的表单以及使用request.user保存上传器字段时出现了什么问题?我应该如何纠正它?一些示例代码会有很大的帮助。
我已阅读Admin site上的Django文档,但它们并不完全回答我的问题。任何启发将不胜感激。
谢谢!那就是诀窍。对于奇怪的问题抱歉,但似乎对ModelAdmin中的save_models存在误解。我认为它与从views.py创建的模型有关,并且每当创建模型时都会被调用。尽管如此,我还是不太清楚在什么情况下你可以调用AdminModel类。它只在与Django的管理站点(/ admin /)相关时才使用? – evkwan 2011-03-30 12:30:14
'ModelAdmin'是严格管理网站。只有django.contrib.admin调用模型管理员。 – 2011-03-30 14:17:36
哦,是啊!你的例子在2小时的摆弄之后做了诀窍!你达人。 – 2014-01-25 06:43:10