我在app direcroty上的utils.py上写了这个函数:
from bm.bmApp.models import Client
def get_client(user):
try:
client = Client.objects.get(username=user.username)
except Client.DoesNotExist:
print "User Does not Exist"
return None
else:
return client
def to_safe_uppercase(string):
if string is None:
return ''
return string.upper()
Run Code Online (Sandbox Code Playgroud)
然后,当我在models.py文件中使用函数to_safe_uppercase时,通过以下方式导入它:
from bm.bmApp.utils import to_safe_uppercase
Run Code Online (Sandbox Code Playgroud)
我得到了python错误:
from bm.bmApp.utils import to_safe_uppercase
ImportError: cannot import name to_safe_uppercase
Run Code Online (Sandbox Code Playgroud)
当我更改import语句时,我得到了这个问题的解决方案:
from bm.bmApp.utils import *
Run Code Online (Sandbox Code Playgroud)
但我无法理解为什么会这样,为什么当我导入特定功能时我得到了错误?
场景:
我有一个片段ViewPager,它有一个FragmentPagerAdapter提供3片段的片段.
所以我的应用程序第一次加载时,3个选项卡片段看起来很好.
当我在应用程序中导航时,我会FragmentManager.replace加载另一个片段.
当我返回或导航到主视图(选项卡式视图)时,我的第一个和第二个选项卡是空白的.
我调试了应用程序,并且Fragment.onDestroyView永远不会调用Tab片段,所以当它再次显示时,Fragment.onCreateView永远不会再次调用,所以我的视图是空白的.
如果我导航到选项卡片段中的第三个选项卡,Fragment.onDestroy则由PageAdapter(我认为因为ViewPager上的1 offLimit)调用
所以,我的问题是,一旦另一个片段被装载在我的活动,然后我回去,或浏览选项卡式浏览,我怎么能强迫ViewPager,或者PageAdapter,甚至片段本身重新创建.
到目前为止,我尝试FragmentManager.remove(fragment)用TabView 做一个没有任何外观,也是,每次,我导航到选项卡视图我传递一个新的实例到FragmentManager.replace方法,似乎每次,他从中拉出相同的对象FragmentManager.
TabView(片段):
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view = inflater.inflate(R.layout.tab_view, container, false);
viewPager = (ViewPager) view.findViewById(R.id.view_iam);
final PagerAdapter pagerAdapter = new MyFragmentAdapter(getActivity().getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
return view;
}
Run Code Online (Sandbox Code Playgroud)
PageAdapter:
private static class MyFragmentAdapter extends FragmentPagerAdapter {
private Fragment[] tabs;
private …Run Code Online (Sandbox Code Playgroud) 使用python 3.5.2和django 1.11多重继承如下:
class Artist(ArtistParent):
biography = models.CharField(max_length=255, blank=True, null=True)
avatar = models.ImageField(null=True, blank=True, upload_to=settings.IMAGES_FOLDER)
owner = models.ForeignKey("accounts.User", related_name="my_artists",
null=True, blank=True, on_delete=deletion.SET_NULL)
class SimilarBand(ArtistParent):
pass
Run Code Online (Sandbox Code Playgroud)
每个工作都很好,但使用ORM接口:
>>> ArtistParent.objects.all().delete()
(0, {})
>>> SimilarBand.objects.all().delete()
(0, {})
>>> ArtistParent.objects.all().delete()
(0, {})
>>> SimilarBand.objects.all().delete()
(0, {})
>>> SimilarBand.objects.create(name="Similar Band Test")
<SimilarBand: Similar Band Test>
>>> SimilarBand.objects.all()
<QuerySet [<SimilarBand: Similar Band Test>]>
>>> ArtistParent.objects.all()
<QuerySet [<ArtistParent: Similar Band Test>]>
>>> SimilarBand.objects.all().count()
1
>>> ArtistParent.objects.all().count()
1
>>> len(ArtistParent.objects.all())
1
>>> len(SimilarBand.objects.all())
1
>>> [print(o) for o …Run Code Online (Sandbox Code Playgroud)