将登录的用户与照片模型相关联

时间:2018-08-30 16:24:51

标签: django django-models

我基本上想通过使用models.ForeignKey将登录的用户名与PhotoModel关联。我在admin.py中覆盖了safe_model,但是当我执行views.py类PhotoCreateNew(View)时,它停在print(form)且表单未经验证(if form.is_valid())跳过了整个原本应该使用的部分将request.user设置为photo.user_name并返回空模板。

我的模型。py

class Photo(models.Model):
user_name =  models.ForeignKey(User, on_delete=models.CASCADE)
PLACES = (('RD','研发-R&D'),('Warehouse','仓库-Warehouse'),('Gate','门卫处-Gate Guard'),('SecondFloor','2F生产部'))
photo = models.FileField()
photo_name = models.CharField(max_length=20)
date = models.DateField(auto_now="True")
quantity = models.CharField(max_length=4)
CONDITIONS = (('N','NG'), ('G', 'GOOD'))
condition =models.CharField(max_length=1,choices=CONDITIONS)
place = models.CharField(max_length=30,choices=PLACES,default='Warehouse')

def __str__(self):
    return self.photo_name
def get_absolute_url(self):
    return reverse('photo:photo_detail', kwargs={'pk':self.pk})

class PhotoForm(ModelForm):
class Meta:
    model = Photo
    fields =['user_name','photo','photo_name','quantity','condition','place']
    exclude= ('user_name',)

我的管理员:

from django.contrib import admin
from photo.models import Photo
from photo.models import Supplier
class PhotoAdmin(admin.ModelAdmin):

def save_model(self, request, obj, form, change):
    if not obj.pk:
        obj.user_name = request.user
    obj.save()


admin.site.register(Supplier,)
admin.site.register(Photo, PhotoAdmin)

我的views.py:

class PhotoCreateNew(View):
form_class = PhotoForm
template_name = 'photo/photo_form.html'


def get(self, request):
    form =self.form_class(None)
    return render(request, self.template_name, {'form':form})

def post(self,request):
    form = self.form_class(request.POST)
    print(request.user)
    print(form)
    if form.is_valid():  # uploader has been excluded. No more error.
        print("Przeszlo")
        photo = form.save(commit=False)  # returns unsaved instance
        photo.user_name = request.user
        print(request.user)
        photo.save()  # real save to DB.

        return redirect('photo:photo_detail')
    return render(request,self.template_name,{})

1 个答案:

答案 0 :(得分:0)

使用request.POST和request.FILES初始化表单类后,它就可以工作了。 我不得不替换:

form = self.form_class(request.POST)

与:

form = self.form_class(request.POST, request.FILES)
相关问题