簡體   English   中英

如何使用表單更新 Django 模型中的記錄?

[英]How to update a record in a Django model using forms?

我是 Django 的新手,需要一些幫助。

我基本上是在嘗試使用 Django 為電影構建一個類似 Tinder 的應用程序,並研究“滑動”功能的基礎知識。 而且,在使用表單時,我無法獲取滑動輸入。 我只想要來自用戶的布爾值(true 表示是,false 表示否),並根據數據庫中的電影 id 進行更新。 但我無法執行此更新。 我的表單添加了一條新記錄。

也許更簡單的替代方法是從模型中完全刪除 swipes 字段,只需將其用作變量並維護一個電影列表,其中該變量被選擇為真。 在這種情況下我無法訪問電影 ID,所以這也失敗了;-;

我如何以簡單有效的方式使其工作?

這是我的 models.py 的樣子:

class Movie(models.Model):

    movie_name = models.CharField(max_length=300) # unique id for room
    movie_description = models.TextField(default='')
    movie_genre = models.CharField(max_length=100)
    movie_date_released = models.DateField(null=True)
    movie_swiped = models.BooleanField(default = False)
    
    # Override the __str__ method to return the firstname and lastname
    def __str__(self):
        return self.movie_name

    def is_exists(self):
        ''' Check whether a user exists in the database '''
        if Movie.objects.get(movie_name=self.movie_name): 
            return True
        else:
            return False

視圖.py

# Create your views here.

class RoomSwipeView(APIView):

    # Define a class variables 
    serializer_class = MovieSerializer
    queryset = []
    swiped_movies=[]

    def get(self, request):

        # Get the room id from the request
        movie_id = request.GET.get('id')
        
        if movie_id: 
            queryset = Movie.objects.filter(id=movie_id)

        else: 
            queryset = Movie.objects.all()
        
        print(queryset)
        print("BRUHHHH")
        
        form = MovieSwipeForm
        
        return render(request,'swipe.html',{'details':queryset, 'form':form})

    def post(self, request):
        form = MovieSwipeForm(request.POST)
        submitted = False
        if request.method == "POST":
            if form.is_valid():
                print("Getting here!!!!!!!")
                swiped = form.save(commit=False)
                if(swiped.movie_swiped):
                    swiped_movies.push(swiped)
                    print(swiped_movies)
        else:
            form = MovieSwipeForm
            if 'submitted' in request.GET:
                submitted = True

        return render(request,'swipe.html',{'details':queryset, 'form':form,'submitted':submitted})

此文件中的另一個問題是 post 方法未訪問swiped_moviesqueryset類變量,這也會引發錯誤。

刷卡.html

<html>
    <body>
        <h1> Movie Details</h1>
        {% for obj in details %}
        {{obj.movie_name}}<br/>
        Description: {{obj.movie_description}}<br/>
        Genre: {{obj.movie_genre}}<br/>
        Date Released: {{obj.movie_date_released}}<br/>
        <!-- <button type="button">YES</button>
        <button type="button">NO</button> -->
        {% if submitted %}
            Success
        {% else %}
            <form action="" method="post">
                {% csrf_token %}
                {{ form.as_p }}
                <input type="submit" value="Submit">
                <!-- <input type="submit" value="NO"> -->

            </form>
        {% endif %}
        <br/><br/>       
        {% endfor %}
    </body>
</html>

表格.py

class MovieSwipeForm(ModelForm):
    class Meta:
        model = Movie
        fields = ('movie_swiped',)

您需要在啟動表單時將要更新它的電影對象的實例傳遞給表單,從而更新一個存在對象,否則 form.save() 將創建新對象

在視圖.py

Instance = Movie.objects.get(id=movie_id)

form = MovieSwipeForm(request.POST, instance=instance)
    

要訪問類中的類參數,您需要調用它們 self.parameter 以便在 post 方法中訪問 queryset 使用 self.queryset

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM