로그인하려는 사용자, save_model() 및 save_formset()에 대한 몇 가지 사항은 Django의 modelAdmin에서 질문합니다.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의 양식이 유효하지 않으며 필수 입력란이므로 저장하지 않습니다.
1) 유효성을 검사하려면 양식을 어떻게받을 수 있습니까?
또한 양식을 저장할 때 modelAdmin에서 save_model()을 사용하여 ForeignKey (User)를 저장하는 방법을 가르치는 게시물 here을 보았습니다. 내 admin.py에 photoAdmin 클래스를 생성하여, 링크와 같이 나는이 overiding 시도했다 :
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와 업 로더 필드를 저장할 수 없습니다 수 . 내 views.py에서 photoForm을 사용하고 있기 때문에 save_formset()도 역시 무시하려고 시도했습니다. 아직 아무 소용이 없습니다.
2) save_model() 및 save_formset()이 실제로 호출되는 시점은 언제입니까?
3) save_formset()과 save_model()의 차이점은 무엇입니까?
4) 위의 views.py에서 form.save()를 호출 할 때 save_model() 또는 save_formset()이 호출됩니까?
5) views.py에서 양식의 유효성을 검사하고 uploader 필드를 request.user로 저장하는 방법에있어 잘못된 점이 무엇이며 어떻게 수정해야합니까? 일부 샘플 코드는 큰 도움이 될 것입니다.
나는 장고 문서를 Admin site에 읽었지만 정확하게 질문에 답하지 않습니다. 어떤 깨달음이라도 대단히 감사하겠습니다.
감사합니다. 그것은 트릭을했다. 별난 질문에 대해 유감스럽게 생각합니다.하지만 ModelAdmin의 save_models에 대한 오해가있었습니다. 나는이 모델이 views.py에서 생성 된 모델과 관련이 있고, 모델이 생성 될 때마다 소중히 여길 것이라고 생각했습니다. 나는 아직도 어떤 상황에서 AdminModel 클래스를 어디에 호출 할 것인가에 대해서는 아직까지 확신 할 수 없다. 장고의 관리자 사이트 (/ admin /)와 관련된 일을 할 때만 사용됩니까? – evkwan
'ModelAdmin'은 관리 사이트 전용입니다. django.contrib.admin 만 모델 admin을 호출합니다. –
오, 그래! 당신의 본보기는 2 시간의 손놀림 후에 트릭을했습니다! 너 다행이야. –