我收到错误,app.models.MultipleObjectsReturned:get()返回多个用户 - 它返回17! 。 我想解析excel并把它放到模型中(City& Prefecture& Area& User)。我写了
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.telephony.SmsManager
import android.widget.TextView
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val textView = findViewById(R.id.mainTextView) as TextView
SEND.setOnClickListener {
textView.setText("click")
val sm = SmsManager.getDefault()
sm.sendTextMessage("123123123", null, "test", null, null)
textView.setText("OK")
}
}
}
我想把这些数据
fourrows_transpose = list(map(list, zip(*fourrows)))
val3 = sheet3.cell_value(rowx=0, colx=9)
user3 = User.objects.get(corporation_id=val3)
print(user3)
if user3:
area = Area.objects.filter(name="America")
pref = Prefecture.objects.create(name="prefecture", area=user3.area)
city = City.objects.create(name="city", prefecture=pref)
price_u1000 = Price.upper1000.objects.get(city=city)
price_500_1000 = Price.from500to1000.objects.get(city=city)
price_u500 = Price.under500.objects.get(city=city)
pref.name = "NY"
pref.save()
for i in range(len(fourrows_transpose)):
city.name = fourrows_transpose[i][1]
city.save()
print(fourrows_transpose[i][1])
price_u1000.name = fourrows_transpose[i][2]
price_u1000.save()
print(fourrows_transpose[i][2])
price_500_1000.name = fourrows_transpose[i][3]
price_500_1000.save()
print(fourrows_transpose[i][3])
price_u500.name = fourrows_transpose[i][4]
price_u500.save()
print(fourrows_transpose[i][4])
模型类似于'美国'到县的区域,城市A到城市的名称和×到价格的名称。我该如何解决这个问题?我该怎么写呢?
答案 0 :(得分:2)
尝试使用此方法 first()
捕获实例的第一条记录user3 = User.objects.filter(corporation_id=val3).first()
它有助于获取特定对象实例的第一条记录,这些可以帮助您
答案 1 :(得分:2)
下面:
user3 = User.objects.get(corporation_id=val3)
您尝试获得单个用户,但您有多个匹配corporation_id=val3
的用户。由于objects.get()
无法猜出你真正想要的是哪一个,因此使用非常明确的消息引发错误是明智的:&#34; get()返回多个用户 - 它返回17&#34; < / p>
此时您主要有四种解决方案:
获取与您的查询匹配的第一个用户(或最后一个或任意随机用户)(使用User.objects.filter(corporation_id=val3)
。first()- or
。last()`etc)并将其命名为天。好吧,你可以把它当作一种解决方案......有点......如果你不关心那个结果。
使corporation_id
模型具有唯一性User
。这意味着每个公司只能拥有一个用户,因此对于每个corporation_id,您必须选择一个并删除所有其他用户。好吧,你可以把它当作一种解决方案......有点......如果你不关心失去大多数用户的话。
添加另一个&#34; use_for_imports&#34;对用户模型的布尔字段,使该字段和corporation_id的组合唯一,并将您的查询更改为“User.objects.get(corporation_id = val3,use_for_import = True). This will also require that you mark one user as "use for imports" for each corporation, else
get(){{1} } User.DoesNotExist`例外。
使用另一个用户字段或字段组合保证对您的用户查找是唯一的,或使用其他方式获取该区域(因为您只使用用户获取will raise a
字段值) 。在这里,没有人可以提供帮助,因为您没有对您的模型,要求等做任何说明。