管理Django中的多对多关系

时间:2017-01-18 11:10:55

标签: python django python-2.7 many-to-many

我需要一个多对多的Django关系;像这样的东西:

  • 我有用户模型
  • 我有地点模型

用户可以添加更多地点。我需要避免在Locations中重复: 如果更多的用户添加相同的位置(即纽约),我会有一个位置" NewYork"在地点模型中。

当用户删除位置时,如果没有其他用户链接到该位置,则也会删除位置表中的相应元素。

我该如何处理这种情况?

1 个答案:

答案 0 :(得分:0)

所以让我们说:

 <Grid ManipulationDelta="Grid_ManipulationDelta">
                <ListView  x:Name="list" >
                    <TextBlock Text="CONTENT"/>
                    <TextBlock Text="CONTENT"/>
                    <TextBlock Text="CONTENT"/>
                    <TextBlock Text="CONTENT"/>
                </ListView>
                </Grid>

private void Grid_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
}

public MainPage()
{
    var content = list.GetChildrenOfType<ScrollViewer>();
    ScrollViewer scrollViewer = content.First() as ScrollViewer; 
    scrollViewer.ViewChanged += Content_ViewChanged;
}

private void Content_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
    if ((sender as ScrollViewer).VerticalOffset == 0)
    {
        (sender as ScrollViewer).VerticalScrollMode = ScrollMode.Disabled;
    }
}

您可能不需要显式定义中间表,但我们在此处使用它来表明它。这是一个简单的多对多设置。

当用户删除某个位置时,您将删除相应的UserLocation条目。然后,您可以查询UserLocation表以查看该位置的任何实例是否仍为其他用户保留。如果没有,请删除该位置。

例如:Billy和Sally是用户。比利增加纽约,这是一个新的位置。您创建Location条目,然后创建UserLocation条目。现在莎莉补充说纽约。纽约已经存在,所以你只需要为她创建UserLocation。

后来,莎莉删除了纽约。首先删除UserLocation条目,然后检查并查看Billy还有一个纽约条目,因此您可以单独保留位置。现在比利删除了纽约。删除他的UserLocation条目后,您会看到纽约不再有实例,因此您可以删除该位置。

也许您通过覆盖UserLocation delete()方法来检查和删除位置?