2017-08-01 52 views
-1

我正在构建一个应用程序,企业可以使用一堆信息上传他们的本地商店。目前,有一种表单正在工作,但我希望实施UpdateView以便企业随时更新其信息。如何实现基于UpdateView类的视图

这里是我的model.py:

class Business(models.Model): 
owner = models.OneToOneField(User, null=False) 
name = models.CharField(max_length=75) 
logo = models.ImageField(null=True, blank=False, upload_to=upload_location) 
players = models.CharField(max_length=4, choices=PLAYERS_CHOICES, default='2-4') 
average_price = models.IntegerField() 
number_games = models.IntegerField() 
city = models.CharField(max_length=25, choices=CITY_CHOICES) 
address = models.CharField(max_length=200) 
website = models.CharField(max_length=300) 
description = models.TextField(max_length=1000, null=True) 
timestamp = models.DateTimeField(auto_now_add=True) 
updated = models.DateTimeField(auto_now=True) 
slug = models.SlugField(null=True, blank=True) 

请注意,我使用的是OneToOneField,因为一个业主只能在站点内有一个业务。

我对形式views.py:

class BusinessCreateView(LoginRequiredMixin, CreateView): 
form_class = BusinessCreateForm 
login_url = '/login/' 
template_name = 'business/form.html' 
success_url = '/' 

def form_valid(self, form): 
    instance = form.save(commit=False) 
    instance.owner = self.request.user 
    return super(BusinessCreateView, self).form_valid(form) 

这里是我的forms.py:

class BusinessCreateForm(forms.ModelForm): 
class Meta: 
    model = Business 
    fields = [ 
     'name', 
     'logo', 
     'players', 
     'average_price', 
     'number_games', 
     'city', 
     'address', 
     'website', 
     'description', 
    ] 

我已经检查的文件,我一直没能实现一个UpdateView。

我该怎么办?

非常感谢你提前!

UPDATE

我已经尽我views.py内查询集并没有奏效:

def get_queryset(self): 
    return Business.objects.filter(user=self.request.user) 
+0

您的问题不清楚。什么阻止你实现UpdateView? –

回答

0

你还没有真正解释你实现一个UpdateView的困难是什么。也许你需要的提示是覆盖get_object以返回业务更新:

from django.shortcuts import get_objet_or_404 

class BusinessUpdateView(LoginRequiredMixin, UpdateView): 
    form_class = BusinessUpdateForm 
    template_name = 'business/form.html' 

    def get_object(self): 
     return get_object_or_404(Business, owner=self.request.user) 
+0

谢谢阿拉斯代尔!它工作完美。当你说我没有正确解释我的问题时你是对的。实际上,我试着实现一个get_query_set()来查找当前的登录用户,但它不起作用。我应该发布这个。再次感谢你。 – kaizencoding

+0

覆盖'get_queryset'并按用户进行过滤是一种可能性,但您需要在URL中包含对象的主键或slu e.g.,例如'/商务/ 10 /更新/'。通过重写'get_object',你不需要在URL中包含主键或者slug。 – Alasdair

+0

再次感谢您。我是否需要在UpdateView中包含form_valid()方法? – kaizencoding

相关问题