Python 保存Django表单数据

Python 保存Django表单数据,python,django,django-forms,Python,Django,Django Forms,我正在学习Django表单,并试图保存表单数据。我有一个工作表单,但我不知道如何“处理”表单上输入的数据。具体而言,我正在尝试做以下两件事: 首先,用户提交表单后,加载一个新页面,其中说明:“您搜索了‘X’” 第二步,让表单数据与现有数据库交互。具体来说,我有一个名为“Hashtag”的模型,它有两个属性:“search_text”和“locations”。我认为这一过程将如下所示: 将X发送到模型(“Hashtag”) 如果X等于数据库中现有的hashtag.search_文本对象,则返回一

我正在学习Django表单,并试图保存表单数据。我有一个工作表单,但我不知道如何“处理”表单上输入的数据。具体而言,我正在尝试做以下两件事:

首先,用户提交表单后,加载一个新页面,其中说明:“您搜索了‘X’”

第二步,让表单数据与现有数据库交互。具体来说,我有一个名为“Hashtag”的模型,它有两个属性:“search_text”和“locations”。我认为这一过程将如下所示:

  • 将X发送到模型(“Hashtag”)
  • 如果X等于数据库中现有的hashtag.search_文本对象,则返回一个带有“以下是'X'的位置:'Y'的页面
  • 如果X不等于数据库中现有的hashtag.search_文本对象,则返回一个带有“以下是“X”的位置:未找到位置”的页面
在哪里,

X=用户输入的表格数据

Y=列表中的hashtag.locations.all()

到目前为止,我有以下资料:

型号.py

from django.db import models


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.TextField()

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # ISSUE: insert correct code, something like: return '[, ]'.join(hastagsearch.location_list for location in self.location.all())
        pass
from django import forms
from django.forms import ModelForm

from .models import Hashtag


class SearchHashtagForm(ModelForm):
    """ ModelForm for user to search by hashtag """

    def clean_hashtag(self):
        data = self.cleaned_data['search_text']
        # Check search_query doesn't include '#'. If so, remove it.
        if data[0] == '#':
            data = data[1:]
        # return the cleaned data
        return data

    class Meta:
        model = Hashtag
        fields = ['search_text',]
        labels = {'search_text':('Hashtag Search'), }
        help_texts = { 'search_text': ('Enter a hastag to search.'), }
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse

from .models import Hashtag
from .forms import SearchHashtagForm


def hashtag_search_index(request):
    """ View for index page for user to input search query """
    hashtag_search = get_object_or_404(Hashtag)

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            # process the form data in form.cleaned_data as required
            hashtag_search.search_text = form.cleaned_data['search_text']
            # the reason we can use .save() is because we associated the form with the model as a ModelForm
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:hashtag_search_query'))
    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_query.html', context)
from django.db import models


class Location(models.Model):
    """ Model representing a Location, attached to Hashtag objects through a
    M2M relationship """

    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name

class Hashtag(models.Model):
    """ Model representing a specific Hashtag serch, containing two attributes:
        1) A `search_text` (fe 'trump'), for which there will be only one per
        database entry,
        2) A list of `locations` (fe ['LA, CA', 'NY, NYC']), for which there
        may be any number of per `search_text` """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location, blank=True)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # Return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location_list = Hashtag.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
def hashtag_search_index(request):
    """ View for index page for user to input search query """

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            hashtag_search.search_text = form.cleaned_data['search_text']
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:results'))

    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_index.html', context)


def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html', context)
from django.db import models


class Location(models.Model):
    """ A model representing a Location, attached to Hashtag objects through a Many2Many relationship """
    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # This will return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
forms.py

from django.db import models


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.TextField()

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # ISSUE: insert correct code, something like: return '[, ]'.join(hastagsearch.location_list for location in self.location.all())
        pass
from django import forms
from django.forms import ModelForm

from .models import Hashtag


class SearchHashtagForm(ModelForm):
    """ ModelForm for user to search by hashtag """

    def clean_hashtag(self):
        data = self.cleaned_data['search_text']
        # Check search_query doesn't include '#'. If so, remove it.
        if data[0] == '#':
            data = data[1:]
        # return the cleaned data
        return data

    class Meta:
        model = Hashtag
        fields = ['search_text',]
        labels = {'search_text':('Hashtag Search'), }
        help_texts = { 'search_text': ('Enter a hastag to search.'), }
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse

from .models import Hashtag
from .forms import SearchHashtagForm


def hashtag_search_index(request):
    """ View for index page for user to input search query """
    hashtag_search = get_object_or_404(Hashtag)

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            # process the form data in form.cleaned_data as required
            hashtag_search.search_text = form.cleaned_data['search_text']
            # the reason we can use .save() is because we associated the form with the model as a ModelForm
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:hashtag_search_query'))
    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_query.html', context)
from django.db import models


class Location(models.Model):
    """ Model representing a Location, attached to Hashtag objects through a
    M2M relationship """

    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name

class Hashtag(models.Model):
    """ Model representing a specific Hashtag serch, containing two attributes:
        1) A `search_text` (fe 'trump'), for which there will be only one per
        database entry,
        2) A list of `locations` (fe ['LA, CA', 'NY, NYC']), for which there
        may be any number of per `search_text` """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location, blank=True)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # Return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location_list = Hashtag.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
def hashtag_search_index(request):
    """ View for index page for user to input search query """

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            hashtag_search.search_text = form.cleaned_data['search_text']
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:results'))

    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_index.html', context)


def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html', context)
from django.db import models


class Location(models.Model):
    """ A model representing a Location, attached to Hashtag objects through a Many2Many relationship """
    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # This will return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
视图.py

from django.db import models


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.TextField()

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # ISSUE: insert correct code, something like: return '[, ]'.join(hastagsearch.location_list for location in self.location.all())
        pass
from django import forms
from django.forms import ModelForm

from .models import Hashtag


class SearchHashtagForm(ModelForm):
    """ ModelForm for user to search by hashtag """

    def clean_hashtag(self):
        data = self.cleaned_data['search_text']
        # Check search_query doesn't include '#'. If so, remove it.
        if data[0] == '#':
            data = data[1:]
        # return the cleaned data
        return data

    class Meta:
        model = Hashtag
        fields = ['search_text',]
        labels = {'search_text':('Hashtag Search'), }
        help_texts = { 'search_text': ('Enter a hastag to search.'), }
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse

from .models import Hashtag
from .forms import SearchHashtagForm


def hashtag_search_index(request):
    """ View for index page for user to input search query """
    hashtag_search = get_object_or_404(Hashtag)

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            # process the form data in form.cleaned_data as required
            hashtag_search.search_text = form.cleaned_data['search_text']
            # the reason we can use .save() is because we associated the form with the model as a ModelForm
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:hashtag_search_query'))
    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_query.html', context)
from django.db import models


class Location(models.Model):
    """ Model representing a Location, attached to Hashtag objects through a
    M2M relationship """

    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name

class Hashtag(models.Model):
    """ Model representing a specific Hashtag serch, containing two attributes:
        1) A `search_text` (fe 'trump'), for which there will be only one per
        database entry,
        2) A list of `locations` (fe ['LA, CA', 'NY, NYC']), for which there
        may be any number of per `search_text` """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location, blank=True)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # Return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location_list = Hashtag.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
def hashtag_search_index(request):
    """ View for index page for user to input search query """

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            hashtag_search.search_text = form.cleaned_data['search_text']
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:results'))

    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_index.html', context)


def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html', context)
from django.db import models


class Location(models.Model):
    """ A model representing a Location, attached to Hashtag objects through a Many2Many relationship """
    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # This will return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
我正在考虑实现这一点的一个潜在方法是创建另一个模型并将用户输入的表单数据保存在那里。我想知道这是否正确,以及如何使用该解决方案来实现上述第二个目标:)

如果我的解释一团糟/完全错误,请提前感谢并道歉:/

编辑

下面的编辑进行了以下更改:

  • 根据@Wiggy A.的回答更新了models.py
  • 更新了views.py以包括
    def结果()
  • 包括GitHub上回购协议的链接
型号.py

from django.db import models


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.TextField()

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # ISSUE: insert correct code, something like: return '[, ]'.join(hastagsearch.location_list for location in self.location.all())
        pass
from django import forms
from django.forms import ModelForm

from .models import Hashtag


class SearchHashtagForm(ModelForm):
    """ ModelForm for user to search by hashtag """

    def clean_hashtag(self):
        data = self.cleaned_data['search_text']
        # Check search_query doesn't include '#'. If so, remove it.
        if data[0] == '#':
            data = data[1:]
        # return the cleaned data
        return data

    class Meta:
        model = Hashtag
        fields = ['search_text',]
        labels = {'search_text':('Hashtag Search'), }
        help_texts = { 'search_text': ('Enter a hastag to search.'), }
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse

from .models import Hashtag
from .forms import SearchHashtagForm


def hashtag_search_index(request):
    """ View for index page for user to input search query """
    hashtag_search = get_object_or_404(Hashtag)

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            # process the form data in form.cleaned_data as required
            hashtag_search.search_text = form.cleaned_data['search_text']
            # the reason we can use .save() is because we associated the form with the model as a ModelForm
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:hashtag_search_query'))
    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_query.html', context)
from django.db import models


class Location(models.Model):
    """ Model representing a Location, attached to Hashtag objects through a
    M2M relationship """

    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name

class Hashtag(models.Model):
    """ Model representing a specific Hashtag serch, containing two attributes:
        1) A `search_text` (fe 'trump'), for which there will be only one per
        database entry,
        2) A list of `locations` (fe ['LA, CA', 'NY, NYC']), for which there
        may be any number of per `search_text` """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location, blank=True)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # Return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location_list = Hashtag.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
def hashtag_search_index(request):
    """ View for index page for user to input search query """

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            hashtag_search.search_text = form.cleaned_data['search_text']
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:results'))

    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_index.html', context)


def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html', context)
from django.db import models


class Location(models.Model):
    """ A model representing a Location, attached to Hashtag objects through a Many2Many relationship """
    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # This will return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
视图.py

from django.db import models


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.TextField()

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # ISSUE: insert correct code, something like: return '[, ]'.join(hastagsearch.location_list for location in self.location.all())
        pass
from django import forms
from django.forms import ModelForm

from .models import Hashtag


class SearchHashtagForm(ModelForm):
    """ ModelForm for user to search by hashtag """

    def clean_hashtag(self):
        data = self.cleaned_data['search_text']
        # Check search_query doesn't include '#'. If so, remove it.
        if data[0] == '#':
            data = data[1:]
        # return the cleaned data
        return data

    class Meta:
        model = Hashtag
        fields = ['search_text',]
        labels = {'search_text':('Hashtag Search'), }
        help_texts = { 'search_text': ('Enter a hastag to search.'), }
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse

from .models import Hashtag
from .forms import SearchHashtagForm


def hashtag_search_index(request):
    """ View for index page for user to input search query """
    hashtag_search = get_object_or_404(Hashtag)

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            # process the form data in form.cleaned_data as required
            hashtag_search.search_text = form.cleaned_data['search_text']
            # the reason we can use .save() is because we associated the form with the model as a ModelForm
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:hashtag_search_query'))
    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_query.html', context)
from django.db import models


class Location(models.Model):
    """ Model representing a Location, attached to Hashtag objects through a
    M2M relationship """

    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name

class Hashtag(models.Model):
    """ Model representing a specific Hashtag serch, containing two attributes:
        1) A `search_text` (fe 'trump'), for which there will be only one per
        database entry,
        2) A list of `locations` (fe ['LA, CA', 'NY, NYC']), for which there
        may be any number of per `search_text` """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location, blank=True)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # Return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location_list = Hashtag.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
def hashtag_search_index(request):
    """ View for index page for user to input search query """

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            hashtag_search.search_text = form.cleaned_data['search_text']
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:results'))

    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_index.html', context)


def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html', context)
from django.db import models


class Location(models.Model):
    """ A model representing a Location, attached to Hashtag objects through a Many2Many relationship """
    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # This will return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
完整回购协议可在此处找到:

编辑2

下面的编辑将进行以下更改:

  • 更新了views.py以包括@Wiggy A.对
    def results()的建议修改。
  • 包括由于更新的更改而收到的错误消息的副本
虽然我直接从Mozilla教程()中复制,但我怀疑以下行:
hashtag\u search.search\u text=form.cleaned\u data['search\u text']
没有正确存储
hashtag\u search

错误

NameError at /search_query/
name 'hashtag_search' is not defined
Request Method: POST
Request URL:    http://ozxlitwi.apps.lair.io/search_query/
Django Version: 2.0
Exception Type: NameError
Exception Value:    
name 'hashtag_search' is not defined
Exception Location: /mnt/project/mapping_twitter/views.py in hashtag_search_index, line 24
Python Executable:  /mnt/data/.python-3.6/bin/python
Python Version: 3.6.5
Python Path:    
['/mnt/project',
 '/mnt/data/.python-3.6/lib/python36.zip',
 '/mnt/data/.python-3.6/lib/python3.6',
 '/mnt/data/.python-3.6/lib/python3.6/lib-dynload',
 '/usr/local/lib/python3.6',
 '/mnt/data/.python-3.6/lib/python3.6/site-packages']
视图.py

from django.db import models


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.TextField()

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # ISSUE: insert correct code, something like: return '[, ]'.join(hastagsearch.location_list for location in self.location.all())
        pass
from django import forms
from django.forms import ModelForm

from .models import Hashtag


class SearchHashtagForm(ModelForm):
    """ ModelForm for user to search by hashtag """

    def clean_hashtag(self):
        data = self.cleaned_data['search_text']
        # Check search_query doesn't include '#'. If so, remove it.
        if data[0] == '#':
            data = data[1:]
        # return the cleaned data
        return data

    class Meta:
        model = Hashtag
        fields = ['search_text',]
        labels = {'search_text':('Hashtag Search'), }
        help_texts = { 'search_text': ('Enter a hastag to search.'), }
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse

from .models import Hashtag
from .forms import SearchHashtagForm


def hashtag_search_index(request):
    """ View for index page for user to input search query """
    hashtag_search = get_object_or_404(Hashtag)

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            # process the form data in form.cleaned_data as required
            hashtag_search.search_text = form.cleaned_data['search_text']
            # the reason we can use .save() is because we associated the form with the model as a ModelForm
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:hashtag_search_query'))
    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_query.html', context)
from django.db import models


class Location(models.Model):
    """ Model representing a Location, attached to Hashtag objects through a
    M2M relationship """

    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name

class Hashtag(models.Model):
    """ Model representing a specific Hashtag serch, containing two attributes:
        1) A `search_text` (fe 'trump'), for which there will be only one per
        database entry,
        2) A list of `locations` (fe ['LA, CA', 'NY, NYC']), for which there
        may be any number of per `search_text` """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location, blank=True)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # Return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location_list = Hashtag.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
def hashtag_search_index(request):
    """ View for index page for user to input search query """

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            hashtag_search.search_text = form.cleaned_data['search_text']
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:results'))

    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_index.html', context)


def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html', context)
from django.db import models


class Location(models.Model):
    """ A model representing a Location, attached to Hashtag objects through a Many2Many relationship """
    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # This will return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')

locations
属性转换为M2M字段。这听起来像是您需要的。请记住,这是未经测试的代码

型号.py

from django.db import models


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.TextField()

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # ISSUE: insert correct code, something like: return '[, ]'.join(hastagsearch.location_list for location in self.location.all())
        pass
from django import forms
from django.forms import ModelForm

from .models import Hashtag


class SearchHashtagForm(ModelForm):
    """ ModelForm for user to search by hashtag """

    def clean_hashtag(self):
        data = self.cleaned_data['search_text']
        # Check search_query doesn't include '#'. If so, remove it.
        if data[0] == '#':
            data = data[1:]
        # return the cleaned data
        return data

    class Meta:
        model = Hashtag
        fields = ['search_text',]
        labels = {'search_text':('Hashtag Search'), }
        help_texts = { 'search_text': ('Enter a hastag to search.'), }
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse

from .models import Hashtag
from .forms import SearchHashtagForm


def hashtag_search_index(request):
    """ View for index page for user to input search query """
    hashtag_search = get_object_or_404(Hashtag)

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            # process the form data in form.cleaned_data as required
            hashtag_search.search_text = form.cleaned_data['search_text']
            # the reason we can use .save() is because we associated the form with the model as a ModelForm
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:hashtag_search_query'))
    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_query.html', context)
from django.db import models


class Location(models.Model):
    """ Model representing a Location, attached to Hashtag objects through a
    M2M relationship """

    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name

class Hashtag(models.Model):
    """ Model representing a specific Hashtag serch, containing two attributes:
        1) A `search_text` (fe 'trump'), for which there will be only one per
        database entry,
        2) A list of `locations` (fe ['LA, CA', 'NY, NYC']), for which there
        may be any number of per `search_text` """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location, blank=True)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # Return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location_list = Hashtag.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
def hashtag_search_index(request):
    """ View for index page for user to input search query """

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            hashtag_search.search_text = form.cleaned_data['search_text']
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:results'))

    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_index.html', context)


def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html', context)
from django.db import models


class Location(models.Model):
    """ A model representing a Location, attached to Hashtag objects through a Many2Many relationship """
    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # This will return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
视图.py

from django.db import models


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.TextField()

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # ISSUE: insert correct code, something like: return '[, ]'.join(hastagsearch.location_list for location in self.location.all())
        pass
from django import forms
from django.forms import ModelForm

from .models import Hashtag


class SearchHashtagForm(ModelForm):
    """ ModelForm for user to search by hashtag """

    def clean_hashtag(self):
        data = self.cleaned_data['search_text']
        # Check search_query doesn't include '#'. If so, remove it.
        if data[0] == '#':
            data = data[1:]
        # return the cleaned data
        return data

    class Meta:
        model = Hashtag
        fields = ['search_text',]
        labels = {'search_text':('Hashtag Search'), }
        help_texts = { 'search_text': ('Enter a hastag to search.'), }
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse

from .models import Hashtag
from .forms import SearchHashtagForm


def hashtag_search_index(request):
    """ View for index page for user to input search query """
    hashtag_search = get_object_or_404(Hashtag)

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            # process the form data in form.cleaned_data as required
            hashtag_search.search_text = form.cleaned_data['search_text']
            # the reason we can use .save() is because we associated the form with the model as a ModelForm
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:hashtag_search_query'))
    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_query.html', context)
from django.db import models


class Location(models.Model):
    """ Model representing a Location, attached to Hashtag objects through a
    M2M relationship """

    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name

class Hashtag(models.Model):
    """ Model representing a specific Hashtag serch, containing two attributes:
        1) A `search_text` (fe 'trump'), for which there will be only one per
        database entry,
        2) A list of `locations` (fe ['LA, CA', 'NY, NYC']), for which there
        may be any number of per `search_text` """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location, blank=True)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # Return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location_list = Hashtag.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')
def hashtag_search_index(request):
    """ View for index page for user to input search query """

    # If POST, process Form data
    if request.method == 'POST':
        # Create a form instance and populate it with data from request (binding):
        form = SearchHashtagForm(request.POST)
        # Check if form is valid
        if form.is_valid():
            hashtag_search.search_text = form.cleaned_data['search_text']
            hashtag_search.save()
            # redirect to a new URL
            return HttpResponseRedirect(reverse('mapping_twitter:results'))

    # If GET (or any other method), create the default form
    else:
        form = SearchHashtagForm()

    context = {'hashtag_search':hashtag_search, 'form':form}
    return render(request, 'mapping_twitter/hashtag_search_index.html', context)


def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html', context)
from django.db import models


class Location(models.Model):
    """ A model representing a Location, attached to Hashtag objects through a Many2Many relationship """
    name = models.CharField(max_length=140)

    def __str__(self):
        return self.name


class Hashtag(models.Model):
    """
    Model representing a specific hashtag search. The model contains two attributes:
        1) a search_text (eg 'trump') for which there will be only one for database entry (the row),
        2) a list of locations (eg ['LA, CA', 'LA, CA', 'NY, NYC', 'London, UK', 'London, United Kingdom']) for which there may be 0+ per search_text.
    """

    search_text = models.CharField(max_length=140, primary_key=True)
    locations = models.ManyToManyField(Location)

    def __str__(self):
        """ String for representing the Model object (search_text) """
        return self.search_text

    def display_locations(self):
        """ Creates a list of the locations """
        # This will return a list of location names attached to the Hashtag model
        return self.locations.values_list('name', flat=True).all()
...
def results(request):
    """ View for search results for `locations` associated with user-inputted `search_text` """

    search_text = hashtag_search
    location = get_object_or_404(Hashtag, search_text=search_text)
    location_list = location.display_locations()

    context = {'search_text':search_text, 'location_list':location_list}

    return render(request, 'mapping_twitter/results.html')

对您通过
hashtag.locations.all()表达的意思有点困惑
。这不是一个文本字段吗?您是否希望hashtag.locations是
位置
模型的多个字段?@WiggyA。如果术语错误,我表示歉意。我指的是与
搜索文本
相关的所有
位置
的列表(由用户输入)包含在
标签
模型中。这清楚吗,或者我的理解有误!:/EDIT:例如,
搜索文本
='trump',然后我尝试获取一个位置列表作为输出(例如,['LA,CA','NYC,NY','London,UK']最终,我将尝试从Twitter上删除这些位置,但这是另一天的事情:)你只想通过文本搜索
标签
模型,对吗?那你为什么要使用表单?我想你只需要使用
get
参数,就能轻松解决你的问题。@seuling使用
form
的原因是我想让用户输入
搜索文本
。我能用
get>实现吗
?提前感谢:)谢谢@Wiggy A.,我已经在上面的问题中相应地更新了models.py文件。我现在可以将
搜索文本
保存到数据库中!:)但是,我仍然无法在mapping\u twitter/results.html页面中打印
搜索文本
。我已经包含了更新版本的t他在上面的编辑中查看了views.py,以及到回购协议的链接。再次感谢:D@ycrad看一下编辑。这是你需要的吗?是的,谢谢:)尽管我有一个错误。我已经更新了编辑2中的上述问题,以揭示具体错误以及我怀疑我犯了一个简单错误的地方。再次感谢:D