2017-08-01 3 views
-1

私は、企業が情報を集めてローカルショップをアップロードできるアプリケーションを構築しています。現在のところ、動作しているフォームがありますが、企業がいつでも必要なときに情報を更新できるように、UpdateViewを実装したいと思います。 1つの所有者が唯一のサイト内1つのビジネスを持つことができるので、私は、OneToOneFieldを使用していUpdateViewクラスベースのビューを実装する方法

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) 

お知らせ:

は、ここに私のmodel.pyです。フォームの

私の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

ありがとうAlasdair!それは完璧に働いた。あなたは私の質問を正しく説明していないと言ったときに正しい。実際、現在のログインユーザを検索するためにget_query_set()を実装しようとしましたが、うまくいきませんでした。私はそれを掲示すべきだった。ありがとうございました。 – kaizencoding

+0

'get_queryset'を上書きしてユーザーにフィルタリングすることも可能ですが、オブジェクトの主キーまたはスラッグをURLに含める必要があります。 '/ business/10/update /'を実行します。 'get_object'をオーバーライドすることで、URLに主キーやスラッグを含める必要はありません。 – Alasdair

+0

もう一度ありがとうございます。 UpdateView内にform_valid()メソッドを含める必要がありますか? – kaizencoding

関連する問題