我有一个问题: 创建新世界后,(所有国家自动分配给每个新世界)用户选择一个国家将显示在网站顶部,他不能删除这个国家。如何做到这一点?
class Country(models.Model):
name = models.CharField(verbose_name="Name of country", max_length=100, default="Australia")
number = models.IntegerField(verbose_name="number of country", default="1")
def __unicode__(self):
return self.name
class World(models.Model):
country = models.ManyToManyField(Country)
name = models.CharField(verbose_name="New Map", max_length=100)
def __unicode__(self):
return self.name
现在我有了这个:在创建世界用户重定向到 new_my_world 之后,他应该在那里选择他的国家并被重定向到具有 my_world View 的站点,在那里他可以删除这个国家。这个怎么做? View .py
def new_my_world(request, pk):
world = get_object_or_404(World, pk=pk)
return render(request, 'game/new_my_world.html', {'world': world})
def my_world(request, pk):
world = get_object_or_404(World.objects.exclude(??, pk=pk)
return render(request, 'game/my_world.html', {'world': world})
def choose_country(request, world_pk, country_pk):
world = get_object_or_404(World, pk=pk)
country = get_object_or_404(Country, pk=pk)
return redirect('my_world', pk=world.pk)
我知道在 my_world View 中应该有一些排除(不包括这个 coosen 国家)但我不知道如何连接它。
编辑
网址:
url(r'^world/(?P<pk>[%&+ \w]+)/(?P<country_pk>[%&+ \w]+)/$', views.my_world, name='my_world'),
编辑2:
如何创建 my_world 的 url?创建新世界后,当我点击第一个国家选择它时出现错误
使用此网址:
url(r'^world/(?P<pk>[%&+ \w]+)/(?P<country_pk>[%&+ \w]+)/$', views.my_world, name='my_world'),
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/world/22/9/
Raised by: game.views.my_world
No World matches the given query.
请您参考如下方法:
我将 choose_country 固定为以下内容:
def choose_country(request, world_pk, country_pk):
world = get_object_or_404(World, pk=world_pk)
country = get_object_or_404(Country, pk=country_pk)
return redirect('my_world', pk=world.pk, country_pk = country.id)
然后在你的 my_world 函数中它应该像这样改变:
def my_world(request, pk, country_pk):
world = get_object_or_404(World.objects.exclude(country__id = country_pk), pk=pk)
return render(request, 'game/my_world.html', {'world': world})
编辑 1 如果该国家/地区与我的世界国家/地区相同,则上述 get_object_or_404(World.objects.exclude(country__id = country_pk), pk=pk) 肯定会返回 Not Found。所以我建议 my_world 如下:
def my_world(request, pk, country_pk):
world = get_object_or_404(World, pk=pk)
countries = get_object_or_404(Country.object.exclude(pk=country_pk))
return render(request, 'game/my_world.html', {'world': world, 'countries': countries})
