我有两种模式:
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
现在,当我创造出几个国家的世界时,我有这样的观点:
def my_world(request, pk):
world = get_object_or_404(World, pk=pk)
return render(request, 'game/my_world.html', {'world': world})
和html文件:
{% for country in world.country.all %}
<a href="{% url 'game.views.delete_country' pk=country.pk %}">{{ country.name }}</a>
{% endfor %}
删除视图:
def delete_country(request, pk):
country = get_object_or_404(Country, pk=pk)
country.delete()
return render(request, 'game/my_world.html', {'world': world})
URL:
url(r'^world/(?P<pk>[%&+ \w]+)/$', views.my_world),
url(r'^world/(?P<pk>[%&+ \w]+)/$', views.delete_country, name='delete_country'),
这就是我发明的一切
现在我在my_world国家/地区列表中,当我点击其中一个时,它会被删除。我想改变它:
答案 0 :(得分:3)
如果您不想完全删除国家/地区,只是将其从特定世界中删除,那么您需要某种方式来识别您的意思是哪个世界。您可能需要在URL中执行此操作:
url(r'^world/(?P<world_pk>\d+)/(?P<country_pk>\d+)/$', views.delete_country, name='delete_country'),
您可以在模板中链接到它:
{% url 'game.views.delete_country' world_pk=world.pk, country_pk=country.pk %}
现在,视图可以获取世界并删除其特定国家/地区。请注意,第二个问题的答案是使用redirect
快捷方式:
def delete_country(request, world_pk, country_pk):
world = get_object_or_404(World, pk=pk)
country = get_object_or_404(Country, pk=pk)
world.country.remove(country)
return redirect("my_world", pk=world.pk)
另请注意,通过简单链接触发删除操作是一个非常糟糕的主意。通常,任何修改数据库的操作 - 尤其是删除某些操作的操作 - 都应该通过表单发布。